JAVA EE_文件操作和IO

人们大多数时候的焦虑,大概是太想要一个那不确定的答案了吧。

                                                                                                                                  一一  陳長生.

1.认识文件

        现实中,我们把一张一张有内容的纸整合在一起称为文件,计算机中,通过硬盘这种I/O设备进行数据保存时,它会独立成一个一个的单位保存,而这种以单位方式保存的也就称为文件。

        文件除了数据内容外,还有文件名,文件类型,文件大小等信息,我们称为文件的元信息。

1.1.树型模型组织 和 目录

        随着文件的越来越多,对一批大量的文件我们就需要进行管理,而树型模型就是个很好的管理模式,有父级,同级,子级,而这种我们一般称为文件夹或目录。

1.2.文件路径(Path)

        那么创建了文件如何在计算机查找那唯一的文件呢,我们一般用绝对路径和相对路径。

1.2.1.绝对路径

        绝对路径就是一条完整的路径,开头是从盘符(例如:C:)开始的,可以从树型的角度想,每个节点都是从根节点开始往下,而树型中的根节点就是我们所谓的盘符。

例:D:\java相关\java ee\4.Java+EE初阶课件\Java EE初阶课件

1.2.2.相对路径

         除了从根节点开始出发,我们还可以从任意节点查找,这种我们就称为相对路径。

例:\Java EE初阶课件

1.3.文件类型

        普通文件由于被保存的方式不同,我们也可以将文件分文本文件和二进制文件。

1.3.1.文本文件

        被ascii码编译过的字符,每个字符都对应着一个ascii码值。

1.3.2.二进制文件

        文件内容通常由字节序列组成,不依赖于字符编码。

2.JAVA中操作文件

        JAVA中通过File类对一个文件进行抽象的描述,注:有File对象并不代表该文件真实存在,它只是对文件或目录路径的抽象表示。

2.1.File类

2.1.1.File构造方法

import java.io.File;
import java.net.URI;
import java.net.URL;
//构造方法示例
public class text1 {public static void main(String[] args) {//File(URL url)//通过url来实例化File对象URI url =new File("text1.txt").toURI();//获取当前类的路径File file1 =new File(url);//File(String pathname)//通过绝对路径来实例化File对象File file2=new File("text1.txt");//获取当前类的路径//File(String parent,string chile)//通过父路径和子路径来实例化File对象File file3=new File("C:/parent","chile.txt");//获取当前类的路径下的chile.class文件//File(File parent,String child)//通过实例化过的父路径和每实例化过的子路径来实例化路径File Praent=new File("C:/parent");File file4=new File(Praent,"chile.txt");}
}

2.1.2.File方法

get相关的方法
//get相关方法
import java.io.File;
public class text2 {public static void main(String[] args) throws Exception  {File file=new File("./text");//获取文件名file.getName();//获取父文件夹名file.getParent();//获取文件路径file.getPath();//获取绝对路劲file.getAbsolutePath();//获取规范路径file.getCanonicalPath();}
}
文件与文件夹(目录)的创建删除
//文件与文件夹(目录)的创建删除
import java.io.File;
public class text3 {public static void main(String[] args) throws Exception {File file=new File("./text");//文件的创建file.createNewFile();//文件的删除file.delete();//文件夹的创建file.mkdir();//多重文件夹的创建file.mkdirs();}
}
判断
//判断
import java.io.File;
public class text4 {public static void main(String[] args) {File file=new File("./text");//判断是否是文件夹file.isDirectory();//判断是否是文件file.isFile();}
}

3.数据流--文件内容的读写

        文件内容的操作,一般分为读文件(硬盘数据读到内存中)和写文件(内存的数据写入硬盘),而我们计算机是用流对象来进行文件内容的操作。

3.1.流操作

        

3.1.1.InputStream与FileInputStream

        JAVA提供的InputStream类可以提供读取方法,但是因为它是抽象类,所以要有它的具体实现类FileputStream来实现读取方法。

1)关闭资源

        JAVA中“关闭资源”是一个重要的操作,它能起到防止资源泄露,保证数据完整性的功能,在JAVA中有提供close()方法来关闭资源,但是大多数情况,我们都是使用try-with-resources(下面讲到)。

2)输出流
read()
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
//read()方法
public class text5 {public static void main(String[] args) throws Exception { //实例化一个File对象,指定文件路径  File file=new File("./text.txt");//创建文件file.createNewFile();//实例化一个FileInputStream对象,指定文件路径//try-with-resources语句,自动关闭资源try(InputStream input=new FileInputStream(file)){//循环读取文件内容while(true){//读取一个字节int c=input.read();//因为当read()方法读取完文件中的内容后还会返回-1//所以当read()方法返回-1时,就说明文件中的内容已经全部读取完了if(c==-1){break;}// 将读取到的字节转换为十六进制格式输出// 适用于查看字节的原始值,不仅限于ASCII编码的文本文件System.out.printf("0x%x",c);System.out.println();}} catch (Exception e) {e.printStackTrace();// TODO: handle exception}}
}
read(byte[] b)
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
//read(byte[] b)
public class text6 {public static void main(String[] args) throws Exception {//实例化File对象,指定文件路径File file=new File("./ccs.txt");//创建文件file.createNewFile();//实例化一个FileInputStream对象,指定文件路径//try-with-resources语句,自动关闭资源try(InputStream f1=new FileInputStream(file)){//循环读取文件内容while(true){//定义一个byte数组,用于存储读取到的字节byte []bytes=new byte[1024];//调用read方法,将文件内容读取到bytes数组中int n=f1.read(bytes);//如果read方法返回-1,表示文件已经读取完毕if(n==-1){break;}  //遍历bytes数组,输出每个字节的十六进制表示for(int i=0;i<n;i++){System.out.printf("0x%x",bytes[i]);System.out.println();}}}catch( Exception e){e.printStackTrace();}  }
}
3)输入流
write()

先创建一个空白的文本文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
//write()方法
//write()方法用于将数据写入文件,数据可以是字节数组,也可以是单个字节。
public class text7 {public static void main(String[] args) throws IOException {//实例化一个File对象,指定文件路径File input=new File("./demo1.txt");//创建文件input.createNewFile();//try-with-resources语句,自动关闭资源//FileOutputStream类是OutputStream的子类,用于将数据写入文件try (OutputStream output = new FileOutputStream(input);){//写入ascii为97,98,99,100的几个字节output.write(97);output.write(98);output.write(99);output.write(100);} catch (Exception e) {e.printStackTrace();}}
}

运行后文本内容

内容为ascii为97,98,99,100的字符

write(byte[] b)方法
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
// write(byte[] b)方法
public class text8 {public static void main(String[] args) throws IOException {//实例化一个File对象,指定文件路径File input=new File("./demo1.txt");//创建文件input.createNewFile();//try-with-resources语句,自动关闭资源//FileOutputStream类是OutputStream的子类,用于将数据写入文件try (OutputStream output = new FileOutputStream(input);){//创建一个字节数组,存储要写入的字节byte[] bytes = {101,102,103,104};//将字节数组写入文件output.write(bytes);   } catch (Exception e) {e.printStackTrace();}}
}

运行后文本内容

由原本的abcd转为efgh

append

        明明没有进行删除操作,为什么abcd不见了呢?其实这个是因为它在每次运行时就创建一个新的文本,相当于将之前的内容清空然后再填入新的数据

        那有没有什么办法可以不清除之前的数据呢,答案是有的!

        可以看到String name后面还有给参数,是boolean类型的append,该参数是判断是否需要追加内容

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
// 追加方法
public class text9 {public static void main(String[] args) throws IOException {//实例化一个File对象,指定文件路径File input=new File("./demo1.txt");//创建文件input.createNewFile();//try-with-resources语句,自动关闭资源//FileOutputStream类是OutputStream的子类,用于将数据写入文件try (OutputStream output = new FileOutputStream(input,true);){//创建一个字节数组,存储要写入的字节byte[] bytes = {101,102,103,104};//将字节数组写入文件output.write(bytes);   } catch (Exception e) {e.printStackTrace();}}
}

运行后文本内容

可以看到已经成功追加数据了~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/78991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UNITY 屏幕UI自适应

1.主要就是根据屏幕的选择根据尺寸 和UI的锚点和中心点来选择&#xff0c;也可以通过代码来动态修改 2.参考视频&#xff1a;Unity UGUI屏幕自适应看这个就够了_哔哩哔哩_bilibili

05-RabbitMQ 面试题-mk

文章目录 1.RabbitMQ 核心组件及功能详解2.RabbitMQ-如何保证消息不丢失?3.RabbitMQ消息的重复消费问题如何解决的?4.RabbitMQ中死信交换机 ? (RabbitMQ延迟队列有了解过嘛)5.RabbitMQ如果有100万消息堆积在MQ , 如何解决(消息堆积怎么解决)6.RabbitMQ的高可用机制有了解过嘛…

产品需求设计评审会:三步精准定位需求核心

“不谋全局者&#xff0c;不足谋一域&#xff1b;不谋万世者&#xff0c;不足谋一时。”——陈澹然 强调了从全局和长远的角度去谋划事情的重要性&#xff0c;与产品设计中先从宏观层面定位需求&#xff0c;而不是陷入细节的理念相契合。 今日清晨&#xff0c;我参加了一场产品…

java中常用的集合 - 面试篇

HashMap 一、基础常量以及结构 //数组默认初始容量static final int DEFAULT_INITIAL_CAPACITY 1 << 4; // aka 16//数组容量最大值static final int MAXIMUM_CAPACITY 1 << 30;//默认扩容因子static final float DEFAULT_LOAD_FACTOR 0.75f;//链表长度阈值 树…

PDF解析示例代码学习

以下是结合多种技术实现的PDF解析详细示例&#xff08;Python实现&#xff09;&#xff0c;涵盖文本、表格和扫描件处理场景&#xff1a; 一、环境准备与依赖安装 # 核心依赖库 pip install pdfplumber tabula-py pytesseract opencv-python mysql-connector-python 二、完整…

Docker容器网络与NAT

一、背景 之前分享关于NAT网络地址转换的相关文章&#xff0c;docker中的网络正好使用到了NAT&#xff0c;顺带着把这个分享一下&#xff0c;分析docker容器的网络数据包流出、数据流入原理分析。 知识回顾: docker运行一个容器之后&#xff0c;会给这个容器一个独立的netns网络…

Spring Boot 热部署详解,包含详细的配置项说明

Spring Boot 热部署详解 1. 热部署简介 热部署&#xff08;Hot Deployment&#xff09;允许在应用运行时修改代码或配置文件&#xff0c;无需重启应用即可使更改生效。Spring Boot 通过 spring-boot-devtools 模块实现这一功能&#xff0c;其核心依赖于 LiveReload 技术和自动…

详细解读 box-sizing: border-box;

代码解读 * {box-sizing: border-box; } 解释&#xff1a; * - 这是CSS的通用选择器&#xff0c;表示匹配文档中的所有元素 box-sizing: border-box; - 设置元素的盒模型计算方式为border-box 盒模型说明&#xff1a; 默认情况下&#xff0c;CSS使用content-box盒模型&…

《一文讲透》第7期:KWDB 巧用标签与索引优化查询性能

引言 在工业物联网快速发展的今天&#xff0c;各类智能传感器设备已广泛应用于智能制造、能源电力、智慧城市等关键领域。这些设备以极高的采样频率持续产生监测数据&#xff0c;使得单条产线每秒产生数十万条传感器数据已成为行业常态&#xff0c;这对数据存储系统的写入吞吐…

哈希扩展——一致性哈希

目录 一、什么是一致性哈希 二、一致性哈希原理 2.1 hash 环 三、服务器扩容场景 3.1 服务器增加 3.2 服务器减少 3.3 使用虚拟节点 四、 一致性哈希的使用场景 一、什么是一致性哈希 一致性哈希是一种哈希算法&#xff0c;用于将数据分布到不同的节点或存储区域&…

arcgis几何与游标(1)

本节我们对几何进行展开学习 ArcPy 的几何对象 在 ArcPy 中&#xff0c;几何对象是表示地理空间数据的核心。它包括点&#xff08;Point&#xff09;、多点&#xff08;Multipoint&#xff09;、线&#xff08;Polyline&#xff09;和面&#xff08;Polygon&#xff09;等类型…

分布式热点网络

核心设计理念&#xff1a; 在自然灾害&#xff08;地震、洪水、台风&#xff09;、极端环境&#xff08;无人区&#xff09;及网络管制&#xff08;欠费停机&#xff09;等场景下&#xff0c;传统中心化网络易因核心节点失效导致全局瘫痪。本方案提出构建去中心化设备网络&…

【5G学习】基本概念之多频资源以及子载波和信道

在5G通信中&#xff0c;子载波、信道以及时域、频域、码域、空域是构建无线传输系统的核心概念。它们共同定义了信号的传输方式、资源分配和多维复用技术。以下是详细解释及其相互关系&#xff1a; 一、核心概念定义 1. 子载波&#xff08;Subcarrier&#xff09; 定义&#…

Coze 和 n8n 的详细介绍及多维度对比分析,涵盖功能、架构、适用场景、成本等关键指标

以下是 Coze 和 n8n 的详细介绍及多维度对比分析&#xff0c;涵盖功能、架构、适用场景、成本等关键指标&#xff1a; 一、Coze 详细介绍 1. 基础信息 类型&#xff1a;低代码自动化平台&#xff08;SaaS&#xff09;。开源性&#xff1a;闭源&#xff08;企业版需付费&…

分发饼干问题——用贪心算法解决

目录 一&#xff1a;问题描述 二&#xff1a;解决思路 贪心策略&#xff08;C语言&#xff09;算法复习总结3——贪心算法-CSDN博客 三&#xff1a;代码实现 四&#xff1a;复杂度分析 一&#xff1a;问题描述 分发饼干问题是一个经典的可以使用贪心算法解决的问题&#xf…

【Python爬虫】简单案例介绍4

本文继续接着我的上一篇博客【Python爬虫】简单案例介绍3-CSDN博客 目录 3.4 完整代码 3.4 完整代码 此小节给出上述案例的完整代码&#xff0c; # encodingutf-8 import re, json, requests, xlwt, csv import pandas as pd from lxml import etree from bs4 import Beauti…

使用ADB工具分析Android应用崩溃原因:以闪动校园为例

使用adb工具分析模拟器或手机里app出错原因以闪动校园为例 使用ADB工具分析Android应用崩溃原因&#xff1a;以闪动校园为例 前言 应用崩溃是移动开发中常见的问题&#xff0c;尤其在复杂的Android生态系统中&#xff0c;找出崩溃原因可能十分棘手。本文将以流行的校园应用&q…

【蓝桥云课】男女搭配 python

题目 题目 题解 import mathT int(input()) for _ in range(T):N, M, K map(int, input().split())people_num N M# 目前为止可以组成的队数group_num min(N // 2, M)if people_num - group_num * 3 < K:group_num-math.ceil((K-(people_num - group_num * 3))/3)pr…

edge 更新到135后,Clash 打开后,正常网页也会自动跳转

发现了一个有意思的问题&#xff1a;edge 更新135后&#xff0c;以前正常使用的clash出现了打开deepseek也会自动跳转&#xff1a; Search Resultshttps://zurefy.com/zu1.php#gsc.tab0&gsc.qdeepseek &#xff0c;也就是不需要梯子的网站打不开了&#xff0c;需要的一直正…

MCP协议实战指南:在VS Code中实现PostgreSQL到Excel的自动化迁移

作者&#xff1a;后端小肥肠 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 从PDF到精准答案&#xff1a;Coze助力RAGFlow框架提升数据召回率_提升ragflow-CSDN博客 CozeTreeMind实测&#xff1a;秒出ISO标准流程图…