代做安装预算的网站,河北省建设局材料备案网站,网站seo优化的目的,做百度网站每年的费用目录
一.认识文件
1.1文件是什么#xff1f;
1.2文件的组织 1.3文件路径
1.4文件的分类
二.文件操作
2.1File概述 三.文件内容操作--IO
3.1JavaIO的认识
3.2Reader和Writer
⭐Reader类
⭐Writer类
3.2FileInputStream和FileOutputStream
⭐FileInputStream类
…目录
一.认识文件
1.1文件是什么
1.2文件的组织 1.3文件路径
1.4文件的分类
二.文件操作
2.1File概述 三.文件内容操作--IO
3.1JavaIO的认识
3.2Reader和Writer
⭐Reader类
⭐Writer类
3.2FileInputStream和FileOutputStream
⭐FileInputStream类
⭐FileOutputStream类
四.总结 个人主页tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 本文由 tq02 原创首发于 CSDN 本章讲解内容文件和IO的讲解 多线程学习专栏多线程学习专栏 其他学习专栏 C语言 JavaSE MySQL基础 在学习文件操作前我们需要了解文件的基本信息才能懂得如何操作文件使用文件。
一.认识文件
1.1文件是什么 问文件是图片、文档、视频、压缩包又或者是那种文件夹呢 答某种意义上都是文件。 文件拥有数据内容以及一些元信息例如文件名、文件类型和文件大小等数据 如果你拥有一台电脑就会经常与文件打交道例如ppt、word等。而对于计算机这些文件都是不一样的主要区别是后缀名不一样。文件一般存放在硬盘当中。
1.2文件的组织 在计算机上面拥有很多文件因此我们不得不对文件进行管理、组织。但是如何组织呢目前通过层序级结构进行组织类似我们在数据结构里学的树形结构也就是电脑上的文件夹或者目录的概念。 1.3文件路径 文件路径分2种一种绝对路径一种相对路径 绝对路径指文件在硬盘上真正存在的路径。它从根目录开始一直到目标文件所在的目录包括所有的父级目录。 例如1.txt文件的绝对路径是“C:\Users\15063\Desktop\1.txt”那么该文件在C盘下Users文件夹中15063文件中Desktop文件夹中。 相对路径相对于当前文件所在目录的路径。它描述了从当前目录到目标文件的位置。相对路径可以是简短的只需指示当前目录和目标文件之间的相对位置即可。 例如1.txt文件在C:\Users\15063\1.txt2.txt在C:\Users\15064\Desktop\2.txt 因此对于2.txt文件而言上一级目录是15064目录再上一级目录是Users目录而15063目录也在Users目录下的文件夹在该文件夹中有1.txt文件。 ./:当前目录 ../上级目录 /下级目录 额外补充在windows上/ 和 \ 没有区别都可以使用
例如1.txt文件位置C:\Users\15063\Desktop\1.txt也可以是C:/Users/15063/Desktop/1.txt
但是在linux当中必须使用 /
1.4文件的分类 文件根据保存数据的不同一般分为2种类型文本文件和二进制文件 文本文件 二进制文件 存储的是字符(utf8字符集 存储二进制数据 问如何判断文件是字符还是二进制 答使用记事本打开如果看的懂就是文本文件看不懂就是二进制文件。 二.文件操作 文件操作是指在计算机中对文件进行读取、写入、修改等各种操作的过程。文件操作可以包括创建和删除文件打开和关闭文件读取和写入文件内容等
2.1File概述 本章使用Java的方式进行文件操作。Java 中通过 java.io.File 类来对一个文件包括目录进行抽象的描述。注意有 File 对象并不代表真实存在该文件。File只能对文件操作不能操作文件的内容。
File类的构造方法说明File(File parent,String Child)根据父目录和孩子文件路径创建新的File实例File(String pathname)根据文件路径创建一个新的File实例路径方式绝对和相对File(String parent,String Child) 根据父目录和孩子文件路径创建新的File实例 父目录用路径表示
个人认为这个File就是让编译器找到对应目录不在乎是否会有这个文件。我们一般使用中间的构造函数File(String pathname)。如果想确认文件是否存在获取路径或者创建文件等等需要使用Filed的方法
File类的方法返回类型说明getParent() String返回 File 对象的父目录文件路径getName()返回 Fle 对象的纯文件名称getPath()返回 File 对象的文件路径getAbsolutePath()返回 File 对象的绝对路径exists()boolean判断 File 对象描述的文件是否真实存在isDirectory判断 File 对象代表的文件是否是一个目录isFile()判断 File 对象代表的文件是否是一个普通文件createNewFile()根据 File 对象自动创建一个空文件。成功创建后返 truedelet()根据 File 对象删除该文件。成功删除后返回 truemkdirs()创建 File 对象代表的目录如果必要会创建中间目录renameTo(File dest)进行文件改名也可以视为我们平时的剪切、粘贴操住deleteOnExit()void根据 File 对象标注这个文件JVM 运行结束时会删除list()String[ ]返回 Fle 对象代表的目录下的所有文件名listFiles()File[ ]返回 File 对象代表的目录下的所有文件以 File 对象表示
利用已学知识点我们现在可以进行文档的创建查询等操作
先创建一个word文档文件.txt 使用其他方法 以上就是File类的所有知识点了可是你有没有发现一个问题似乎只能创建文件查询文件位置删除文件而不能对文件进行操作对文件内容进行操作也有其对应的类。 三.文件内容操作--IO
3.1JavaIO的认识 文件内容的操作缺少不了流使用的类便是文件流(.stream). 文件流类似水流例如:有一个1000ml的水桶可以分为10次接(每次100ml)、也可以分为5次接(每次200ml)等等。而操作文件时也是一样的可以分多次读取。 Java IO可以分为输入流和输出流分别对应于读取和写入数据。其中输入流包括InputStream和Reader输出流包括OutputStream和Writer。 关于操作字节流的类有 InputStream、OutputStream ----二进制文件 关于操作字符流的类Reader、Writer-----文本文件 不同的编程语言对于文件操作都有不同的api但是它们的核心步骤相同
打开文件关闭文件读文件写文件
3.2Reader和Writer Java中Reader和Writer是用于字符流的输入和输出的抽象类(不可以直接创建的)。它们是用来处理字符数据的而不是字节数据。Reader和Writer提供了一组方法来读取和写入字符数据可以用于读取和写入文本文件以及其他字符流。
⭐Reader类 创建Reader 对象名new FileReader( 文件路径 或 File对象); 注会产生异常可能存在文件无法查找因此需要抛出异常或者使用try{}catch{} 代码示例
//构造方法传递文件路径
Reader readnew FileReader(D:\360安全浏览器);//构造方法传递File对象
File t1new File(D:\360安全浏览器);
FileReader raedernew FileReader(t1); 文件操作中打开文件也需要关闭文件。 关闭文件对象名.close(); 注也会产生异常也需要抛出异常IOException而创建产生的异常是IOException的子类因此只需要抛出IOException异常即刻。 未执行close()方法的后果 导致文件资源泄露。占用进程的PCB的文件描述表会被占满后续就无法打开新的文件。 对于close()方法我们可能会发生特殊的情况导致代码没有执行到close()。
public int add(){FileReader raedernew FileReader(./src/文件.txt);return 10 //该方法调用时打开了文件但是还没有关闭文件就已经使用return结束了。raeder.close();
}
而对于以上情况有一种特殊的用法使代码自动调用close()方法 try(Reader 对象名new FileReader( 文件路径 或 File对象)){ //待执行方法 } 注try代码执行完毕之后会自动调用close()方法。该方法也适用于其他内容操作类 Reader类的方法解释 read() 读取字符skip(long n)跳过的字符数目nready()是否准备好读取
代码示例 //文件中的内容1 2 3 4 5 6 7 8try(FileReader t1new FileReader(./src/文件.txt)){System.out.println( t1.read()); //读取1 对应的字符集数字System.out.println( t1.read()); //读取2 对应的字符集数字t1.skip(2); //跳过2个字符System.out.println(t1.read()); //读取5 对应的字符集数字}
⭐Writer类 创建Writer 对象名new FileWriter( 文件路径 或 File对象); 注会产生异常因此需要抛出异常或者使用try{}catch{}。 代码示例
//构造方法传递文件路径
Writer kknew FileWriter(kk.txt);//构造方法传递File对象File t1new File(kk.txt);FileWriter kknew FileWriter(t1);
FileWriter构造方法
FileWriter(File file)
//用一个打开的文件描述符作为构造参数数据将输出到该文件描述符对应的节点FileWriter(File fileFileDescriptor fd)
//append是否以追加的方式写如果该fd为false则文件会被覆盖下边append同义
Writer方法
Writer方法解析append(char c)将指定的字符c附加到此。appendCharSequence csq)将指定的字符序列 csq 写入文件 appendCharSequence csqint startint end 将指定的字符序列的子序列写入文件write(char[] cbuf)此方法写入字符数组。 write(char[] cbuf, int off, int len)写入字符数组的一部分 write(int c)写入的单个字符(数字c对应的Unicode位置的字符 write(String str)写入一个字符串。 flush()此方法刷新流。 close()关闭
代码示例 public static void main(String[] args) throws IOException {CharSequence csq Hello World!;//writer和append以追加的方式写入而不是覆盖try(Writer kknew FileWriter(kk.txt,true)){//write方法char[] array{a,b,c,d};kk.write(array); //把数组传递到文件当中kk.write(100);//对应的Unicode表是dkk.write(\nHello World! \n\n); //将字符串传递到文件当中kk.flush(); //刷新保存数据//append方法kk.append(c);kk.append(csq,0,5); //将csq的字符序列的0到5的子序列传递到文件当中kk.append(csq); //将csq的字符序列传递到文件当中kk.flush(); //刷新保存数据//不需要使用close();}
注:虽然append方法不可以传递字符串但是可以借CharSequence传递字符序列达成相同的结果。
append和write的区别 append方法是Writer类中的一个重载方法在Writer类中有多个append方法用于向输出流中添加字符、字符串、字符数组等。write方法则只有一个接受一个字符数组或字符串参数。 append方法返回值是调用该方法的Writer对象实例可以链式调用多个append方法实现连续的输出。而write方法没有返回值。 append方法可以在输出流中添加任何类型的数据包括null而write方法不能输出null否则会抛出NullPointerException异常。 append方法可以在输出流中追加字符而write方法只能一次性输出全部字符不能追加。
综上所述append方法更加灵活可用于向输出流中添加不同类型的数据而write方法则更加简单只能输出字符串或字符数组不能追加数据。 3.2FileInputStream和FileOutputStream 在InputStream类和OutputStream类中我们主要讲解他们的子类FileInputStream类和FileOutputStream类。
注FileInputStream和FileOutputStream是以字节方式操作文件
⭐FileInputStream类 FileInputStream类用于从文件中读取字节流。它继承自InputStream类并提供了一些方法来读取文件中的数据。你可以使用它来打开一个文件并从文件中逐个字节地读取数据。不仅可以读取文本内容甚至可以读取图像文件。注一个字节为8个bit
构造方法
//利用 File 构造文件输出流
File t1new File(kk.txt);
FileInputStream t2new FileInputStream(t1) //利用文件路径构造文件输入流
InputStream t2new FileInputStream(String name)
注文本文件也可以使用字节流打开。但由于是读取的是每一个字节因此可能无法代表完整字符。
FileInputStream方法
方法解析read(byte[] b,int off,int len)一次读取len个字节从数组off下标开始填充len个字节数返回读取的字节个数read(byte[] b)一次读取读取最多b.length个字节的数据到字节数组b返回读取的字节个数read()读取一个字符如果没有输入可用此方法将阻止。返回字节数据skip() 跳过并从输入流中丢弃n个字节的数据。 available()返回输入流当中剩余字节数的估计数 文件位置超出EOF时返回0 close() 关闭此文件输入流并释放与流相关联的任何系统资源。注:使用try可以省略该方法
代码示例 public static void main(String[] args) throws IOException {
//使用try可以不使用close()方法try(InputStream inputStreamnew FileInputStream(kk.txt)) {
//查询kk文件当中还有多少字节System.out.println(inputStream.available());
//查询当前字节是什么 System.out.println(inputStream.read());
//将文件内容传递到数组aa当中byte[] aanew byte[10];int ainputStream.read(aa,3,4); //将数组下标为3开始存储3个输入流的字节//返回存储的数目int binputStream.read(aa); //返回数组存储输入流的数目个数 }
} 问如何将读取到的字节转换为原本的内容例如文本里是文字等内容可是读取出来为字节无法知晓原本的内容。 答2种方法 借助一些额外的工具类完成字节转换为字符串的工具类直接使用String类使用构造方法。 方法一
public static void main(String[] args) throws IOException {//文档中内容为我爱你Javatry(InputStream inputStreamnew FileInputStream(kk.txt)) { byte[] aanew byte[1024];int ainputStream.read(aa); 将文本内容输入到数组byte当中。String t1new String(aa,0,a,utf8);System.out.println(aa); //输出我爱你Java }
}
方法二工具类Scanner可将当前读取到的字节数据进行转换。数据可以是标准输入也可以是其他来源。注不可以读取二进制文件 try(InputStream inputStreamnew FileInputStream(kk.txt)) {//从键盘上读取数据Scanner scannew Scanner(System.in);//此时就是从文件当中读取数据Scanner scnew Scanner(inputStream);String ssc.next();System.out.println(s);
}
额外补充调整idea的字符集方法File--Settings ⭐FileOutputStream类 FileOutputStream类用于将字节流写入文件。它继承自OutputStream类并提供了一些方法来向文件中写入数据。你可以使用它来创建一个新文件或覆盖已有的文件并将字节数据写入文件中。例如你可以使用FileOutputStream将文本数据写入一个新文件或者将图像数据写入一个图像文件中。
构造方法
//利用 File 构造文件输入流
File t1new File(kk.txt);
FileOutputStream t2new FileOutputStream(t1) //利用文件路径构造文件输入流
OutputStream t2new FileOutputStream(String name)
OutputStream的方法
方法解析close()关闭此输出流并释放与此流相关联的任何系统资源。flush()刷新此输出流并强制任何缓冲的输出字节被写出。write(byte[] b)将字节数组输入到文件中write(byte[ ] b,int off,int len将下标为off的位置开始输入len个字节到文件当中 write(int b) 将指定的字节输入到文档当中
如同InputStream的方法可以搭配Scanner()方法OutputStream可以搭配PrintWriter
import java.io.*;public class PrintWriterExample {public static void main(String[] args) {try {OutputStream outputStream new FileOutputStream(kk.txt);PrintWriter printWriter new PrintWriter(outputStream);printWriter.println(Hello, World!);printWriter.println(This is an example.);printWriter.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}
} 在上面的示例中我们创建了一个名为kk.txt的文件并将其作为输出流的目标。然后我们创建了PrintWriter对象并将outputStream作为参数传递给它。最后我们使用printWriter的println方法来写入文本内容并在最后关闭printWriter和outputStream。这样文本将被写入到output.txt文件中。你可以根据自己的需求修改输出的目标和写入的内容。 四.总结
字节操作:InputStream、OutputStream 字符操作Reader、Writer使用try的方法可以避免忘记close()方法。Scanner工具类可以读取键盘输入的数据也可以接收文本的数据但不可以读取二进制文件PrintWriter搭配OutputStream可简化代码效果提供了printf、println等方法直接写入到文件当中 输出流对象(无论是字节流还是字符流)会打开文件之后清空文件内容。但可以使用追加的方法此时不会清空内容。