🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿
- 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳 您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻
输入输出
主要内容
1️⃣二进制I/O流
2️⃣ 文本I/O流
3️⃣ 对象序列化:对象I/O流
4️⃣ NIO 和NIO.2:new I/O
5️⃣Files类操作:读写和操作目录和文件。
Java I/O概述
- 目前Java支持文件I/O和流式I/O。流式I/O分为输入流和输出流。
- 按照处理数据的类型分,数据流又可分为: 二进制流,也称为字节流。 单位:字节 文本流,也称为字符流。 单位:字符
二进制I/O流
主要内容
①java.io.File类应用
②二进制I/O与文本I/O
③InputStream类和OutputStream类
④常用二进制I/O流
⑤标准输入/输出流
1️⃣java.io.File类
- java.io.File类用来表示物理磁盘上的实际文件或目录,但它不表示文件中数据。
- 绝对文件名是由驱动器字母、完整的路径以及文件名组成,如D:\study\Hello.txt是Windows系统下的一个绝对文件名。
- 相对文件名是相对于当前工作目录的。例如,Hello.txt是一个相对文件名。如果当前工作目录是D:\study,绝对文件名是D:\study\Hello.txt。
File类常用方法
publicbooleanexists()publiclonglength()publicbooleancreateNewFile()publicbooleanrenameTo(File newName)publicbooleandelete()publiclonglastModified()
2️⃣二进制I/O与文本I/O
- 文件通常可以分为文本文件和二进制文件。
- 使用文本I/O将字符串“123”写入文件,那么每个字符的二进制编码都会写入到文件。 使用二进制I/O向文件写入一个数据,就是将内存中的值复制到文件中。例如,一个byte类型的数值123在内存中表示为0111 1011,将它写入文件也是0111 1011。
3️⃣InputStream类和OutputStream类
- InputStream类是二进制输入流的根类,它有多个子类。
publicintread()publicintread(byte[] b)publicvoidclose()
- OutputStream类是二进制输出流的根类,它有多个子类。
publicvoidwrite(int b)publicvoidwrite(byte[] b)publicvoidclose()
4️⃣常用二进制I/O流
- FileInputStream类和FileOutputStream类用来实现文件的输入输出处理。
- FileInputStream类和FileOutputStream类都实现了java.lang.AutoClosable接口,因此可以在try-with-resources语句中使用,当流使用完自动将它们关闭。
文件字节流的应用
问题描述:
编写程序,用FileOutputStream对象向output.dat文件中写入10个10到99的随机整数。
编写另一个程序,然后使用FileInputStream对象从output.dat文件中读出这10个数并输出。
第一个程序:写入文件
importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Random;publicclassWriteRandomNumbers{publicstaticvoidmain(String[] args){Random random =newRandom();FileOutputStream fos =null;try{
fos =newFileOutputStream("output.dat");for(int i =0; i <10; i++){int number = random.nextInt(90)+10;// 生成10到99之间的随机数
fos.write(number);// 直接写入int类型会有问题,因为write方法接收byte类型 // 使用DataOutputStream可以更方便地写入int等类型 // 但为了简单演示,这里仅写入低字节(不推荐) // 更好的做法是使用DataOutputStream
fos.write('\n');// 写入换行符,仅作分隔使用,实际文件不会以文本形式展示换行 }}catch(IOException e){
e.printStackTrace();}finally{if(fos !=null){try{
fos.close();}catch(IOException e){
e.printStackTrace();}}}}}// 注意:上述代码中的fos.write(number);部分直接将整数的低字节写入文件,这会导致数据丢失。 // 正确的做法是使用DataOutputStream来写入int等复杂类型。
第二个程序:读取文件
importjava.io.FileInputStream;importjava.io.IOException;publicclassReadRandomNumbers{publicstaticvoidmain(String[] args){FileInputStream fis =null;try{
fis =newFileInputStream("output.dat");int ch;while((ch = fis.read())!=-1){// 由于只写入了低字节,这里打印的将是乱码,或者是不完整的整数 System.out.print(ch +" ");}// 注意:这里的输出并不是原始的整数,因为写入的方式不正确 }catch(IOException e){
e.printStackTrace();}finally{if(fis !=null){try{
fis.close();}catch(IOException e){
e.printStackTrace();}}}}}// 注意:上面的代码不能正确还原出写入的整数,因为它只读取了低字节。 // 如果要正确读取,需要使用DataInputStream,并且写入时也应该使用DataOutputStream。
- BufferedInputStream为缓冲输入流,BufferedOutputStream为缓冲输出流,这两个类用来对流实现缓冲功能。
- 使用缓冲流可以减少读写数据的次数,加快输入输出的速度。
数据I/O流
DataInputStream
和
DataOutputStream
类分别是数据输入流和数据输出流。使用这两个类可以实现基本数据类型的输入输出。
byte readByte
intreadInt()charreadChar()booleanreadBoolean()doublereadDouble()StringreadLine() 。
StringreadUTF()
voidwriteByte(int v)voidwriteInt(int v)voidwriteChar(int v)voidwriteBoolean(boolean v)voidwriteDouble(double v)voidwriteUTF(String s)
- 下面语句为文件input.dat创建了缓冲输入流,然后将其包装成数据输入流。
DataInputStream inFile =newDataInputStream(newBufferedInputStream(newFileInputStream("input.dat")));
- 下面语句为文件input.dat创建了缓冲输出流,然后将其包装成数据输出流。
DataOutputStream outFile =newDataOutputStream(newBufferedOutputStream(newFileOutputStream("output.dat")));
PrintStream类
PrintStream
类为打印各种类型的数据提供了方便。该类定义了多个print()和println ()方法,可以打印输出各种类型的数据,这些方法都是把数据转换成字符串,然后输出。如果输出到文件中则可以用记事本浏览。- System.out对象就是PrintStream类的一个实例,用于向控制台输出数据。
标准I/O流
- Java系统事先定义了两个对象System.in和System.out,分别与系统的标准输入和标准输出相联系,另外还定义了标准错误输出流System.err。
System.in 是InputStream类的实例
System.out 是PrintStream类的实例
System.err 是PrintStream类的实例
综合实例
问题描述
尝试用PrintStream类的对象,将打印到控制台的话打印到一个文件中
1File file =newFile("F:\\a.txt");2PrintStream printStream =newPrintStream(file);5 printStream.println("hello world");1File file =newFile("F:\\a.txt");2PrintStream printStream =newPrintStream(file);3System.setOut(printStream);4System.out.println("打印到F:\\a.txt中");
博主用心写,读者点关注,互动传真情,知识不迷路。
版权归原作者 倾听一世,繁花盛开 所有, 如有侵权,请联系我们删除。