笔上得来终觉浅,绝知此事要躬行
🔥 个人主页:星云爱编程
🔥 所属专栏:javase
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
目录
一、文件
1.1基本介绍
1.2文件流
1.3常用的文件操作
1.3.1创建文件对象相关构造器和方法
1.3.2获取文件的相关信息
1.3.3目录的操作和文件删除
二、IO 流原理及流的分类
2.1 IO流原理
2.2流的分类
2.3IO 流体系图
三、IO流常用的类
3.1FileInputStream
3.1.1基本介绍
3.1.2常用方法
3.1.3使用案例
3.2FileOutputStream
3.2.1基本介绍
3.2.2得到FileOutputStream对象的方法
3.2.3写入内容方式
(1)写入一个字节
(2)写入字符串
3.2.4使用案例
编辑 3.3FileReader
3.3.1基本介绍
3.3.2常用方法
3.3.3使用案例
3.4FileWriter
3.4.1基本介绍
3.4.2常用方法
3.4.3使用案例
四、节点流和处理流
4.1基本介绍
4.2节点流和处理流一览图
4.3节点流和处理流的区别与联系
4.4处理流的功能主要体现在以下两个方面
4.5BufferedReader和BufferedWriter
4.5.1基本介绍
4.5.2常用方法
4.5.2使用案例
4.6 BufferedInputStream 和 BufferedOutputStream
4.6.1基本介绍
4.6.2使用案例
4.7对象流:ObjectInputStream 和 ObjectOutputStream
4.7.0序列化与反序列化
4.7.1基本介绍
4.7.2使用案例
4.7.3注意事项
4.8标准输入输出流
4.8.1基本介绍
4.8.2使用案例
4.9转换流:InputStreamReader 和 OutputStreamWriter
4.9.1基本介绍
4.9.2使用案例
4.10打印流:PrintStream和PrintWriter
4.10.1基本介绍
4.10.2使用方式
4.10.3使用案例
五、Properties 类
5.1基本介绍
5.2常用方法
结语
一、文件
1.1基本介绍
文件是保存数据的地方,例如word文档、txt文本文件,excel文件等都是文件。文件能保存图片,视屏,音频等。
1.2文件流
文件在程序中是以流的形式来操作的:
流:数据在数据源(文件)和程序(内存)之间经历的路程。
输入流:数据从数据源(文件)到程序(内存)的路径。
输出流::数据从程序(内存)到数据源(文件)的路径。
1.3常用的文件操作
1.3.1创建文件对象相关构造器和方法
(1)根据路径构建一个File对象:
new File(String pathname);
(2)根据父目录文件+子路径构建:
new File(File parent,String child);
(3)根据父目录+子路径构建 :
new File(String parent,String pathname);
(4)createNewFile
如果命名文件不存在且成功创建,则返回true。
如果命名文件已经存在,则返回false。
其源码如下:
创建案例:在D盘创建test_1.txt文件
public class Test1 {public static void main(String[] args) {String pathname="D:\\test_1.txt";//文件路径File file = new File(pathname);try {if(file.createNewFile())//创建文件{System.out.println("文件创建成功");}} catch (IOException e) {throw new RuntimeException(e);}}
}
1.3.2获取文件的相关信息
相关方法:
方法 | 说明 |
---|---|
getName | 获取文件名 |
getAbsolutePath | 获取绝对路径 |
getParent | 父级目录 |
length | 获取文件大小(字节) |
exists | 判断文件是否存在 |
isFile | 判断是不是文件 |
isDirectory | 判断是不是目录 |
1.3.3目录的操作和文件删除
方法 | 说明 |
---|---|
mkdir | 创建一级目录 |
mkdirs | 创建多级目录 |
delete | 删除空目录或文件 |
二、IO 流原理及流的分类
2.1 IO流原理
(1)I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据运输,例如:读/写文件、网络通讯等。
(2)java程序中,对于数据的输入/输出操作以"流(stream)"的方式进行。
(3)java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过方法输入/输出数据。
(4)输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
(5)输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。
2.2流的分类
(1)按操作数据单位不同分为:字节流(1byte)二进制文件、字符流(按字符)文本文件;
(2)按数据流的流向不同分为:输入流、输出流;
(3)按流的角色不同分为:节点流、处理流/包装流。
抽象基类 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
说明:
①java的IO流涉及40多个类,但非常规则,都是从如上4个抽象基类派生的;
②由这四个类派生出来的子类名称都是以父类名称作为子类名称后缀。
2.3IO 流体系图
三、IO流常用的类
3.1FileInputStream
3.1.1基本介绍
文件输入流:读取文件,单个字节的读取,效率比较低
3.1.2常用方法
(1)read
从该输入流读取一个字节的数据。 如果没有输入可用,此方法将阻止。
如果返回-1, 表示读取完毕。
源码如下:
(2)read(byte[] b)
从该输入流读取最多b.length字节的数据到字节数组。 此方法将阻塞,直到某些输入可用。
如果返回-1, 表示读取完毕;如果读取正常, 返回实际读取的字节数。
源码如下:
(3)close
关闭文件流,释放资源
3.1.3使用案例
(1)用read()方法读取文件:
import java.io.FileInputStream;
import java.io.IOException;public class Test3 {public static void main(String[] args) {String pathname="D:\\javacode\\javacode\\IO_1\\test_1.txt";//文件路径int readData=0;FileInputStream fileInputStream=null;try {//创建FileInputStream对象,用于读取文件fileInputStream = new FileInputStream(pathname);while((readData=fileInputStream.read())!=-1){System.out.print((char)readData);//将读取的内容转为char显示}} catch (IOException e) {throw new RuntimeException(e);}finally {try {fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
(2)用read(byte[] b)方法读取文件:
import java.io.FileInputStream;
import java.io.IOException;public class Test4 {public static void main(String[] args) {String pathname="D:\\javacode\\javacode\\IO_1\\test_1.txt";//文件路径byte[] buf = new byte[8]; //一次读取 8 个字节int readlen=0;FileInputStream fileInputStream=null;try {//创建FileInputStream对象,用于读取文件fileInputStream = new FileInputStream(pathname);while((readlen=fileInputStream.read(buf))!=-1){System.out.print(new String(buf,0,readlen));//将读取的内容转为char显示}} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭文件流,释放资源try {fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
3.2FileOutputStream
3.2.1基本介绍
文件输出流:将数据写到文件中。
3.2.2得到FileOutputStream对象的方法
(1)new FileOutputStream(String filePath)
当写入内容时,会覆盖原来的内容。
(2)new FileOutputStream(String filePath,boolean append)
若append为true ,当写入内容时,是追加到文件后面;
若append为false ,当写入内容时,会覆盖原来的内容。
3.2.3写入内容方式
(1)写入一个字节
write(int b)
将指定的字节写入此文件输出流。
eg:
fileOutputStream.write('a');
(2)写入字符串
①write(byte[] b)
将 b.length
个字节从指定的字节数组写入此文件输出流。
源码如下:
eg:
String str ="hello";
fileOutputStream.write(str.getBytes());
注意:getBytes()方法可以把字符串转化为字节数组 。
②write(byte[] b, int off, int len)
将 len
字节从位于偏移量 off
的指定字节数组写入此文件输出流。
源码如下:
eg:
String str ="hello";
fileOutputStream.write(str.getBytes(),0,4);
3.2.4使用案例
(1)写入一个字符串
import java.io.FileOutputStream;
import java.io.IOException;public class Test5 {public static void main(String[] args) {String pathname="D:\\javacode\\javacode\\IO_1\\test_1.txt";//文件路径String str="happy new year!";//要写入的内容FileOutputStream fileOutputStream=null;try {fileOutputStream = new FileOutputStream(pathname, false);//创建对象,不可追加//fileOutputStream.write(str.getBytes());fileOutputStream.write(str.getBytes(),0,str.length());} catch (IOException e) {throw new RuntimeException(e);}finally {try {fileOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
(2)完成图片/音乐的拷贝:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class CopyPicture {public static void main(String[] args) {String srcFilepath="D:\\javacode\\javacode\\IO_1\\mysql_1.jpg";//源路径String destFilepath="D:\\javacode\\javacode\\IO_1\\mysql_2.jpg";//拷贝路径FileInputStream fileInputStream = null;FileOutputStream fileOutputStream = null;try {fileInputStream=new FileInputStream(srcFilepath);fileOutputStream=new FileOutputStream(destFilepath);//定义一个字节数组,提高读取效果byte[] buf = new byte[1024];int readLen = 0;while ((readLen = fileInputStream.read(buf)) !=-1) {//读取到后,就写入到文件 通过 fileOutputStream//即,是一边读,一边写fileOutputStream.write(buf, 0, readLen);//一定要使用这个方法}System.out.println("拷贝 ok~");} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭输入流和输出流,释放资源try {if(fileInputStream!=null) {fileInputStream.close();}if(fileOutputStream!=null) {fileOutputStream.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
拷贝完成!
3.3FileReader
3.3.1基本介绍
FileReader是用于读取字符流的。
3.3.2常用方法
(1)构造方法:
new FileReader(File file);
new FileReader(String fileName);
(2)read()
每次读取单个字符,返回该字符,如果读到文件末尾返回-1。
源码如下:
(3)read(char[] cbuf)
批量读取多个字符到数组,返回读取到的字符数,如果读到文件末尾返回-1。
源码如下:
3.3.3使用案例
(1)使用read()方法读取文件
import java.io.FileReader;
import java.io.IOException;public class Test6 {public static void main(String[] args) {String path="D:\\javacode\\javacode\\IO_1\\read.txt";FileReader fileReader=null;int readData=0;try {fileReader = new FileReader(path);while((readData=fileReader.read())!=-1){System.out.print((char) readData);}} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭字符流,释放资源try {fileReader.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
(2) 使用read(char[] b)读取文件
public class Test7 {public static void main(String[] args) {String path="D:\\javacode\\javacode\\IO_1\\read.txt";FileReader fileReader=null;int readlen=0;char []buf=new char[8];try {fileReader = new FileReader(path);while((readlen=fileReader.read(buf))!=-1){System.out.print(new String(buf,0,readlen));}} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭字符流,释放资源try {fileReader.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
3.4FileWriter
3.4.1基本介绍
FileWriter是用于写入字符流。
3.4.2常用方法
(1)构造方法
①
FileWriter(String fileName);
覆盖模式,相当于流的指针在文件首端。
源码如下:
②
FileWriter(String fileName, boolean append);
可追加模式,
若append为true ,当写入内容时,是追加到文件后面;
若append为false ,当写入内容时,会覆盖原来的内容。
源码如下:
(2)write(int b)
写入单个字符。
(3)write(char[] cbuf)
写入指定数组。
(4)write(String str)
写入整个字符串。
(5)write(String str, int off, int len)
将len字符从位于偏移量off的指定字符串写入此字符输出流。
其源码如下:
(6)write(char[] cbuf, int off, int len)
将len字符从位于偏移量off的指定字符数组写入此字符输出流。
源码如下:
(7)close()
关闭文件流,释放资源。
注意:FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。
3.4.3使用案例
(1)将字符串写入文件
import java.io.FileWriter;
import java.io.IOException;public class Test1 {public static void main(String[] args) {String path="D:\\javacode\\javacode\\IO_1\\write.txt";//写入路径String str="今天是2025年,祝大家新年快乐!";//写入内容FileWriter fileWriter=null;try {fileWriter = new FileWriter(path);//默认是覆盖写入fileWriter.write(str);} catch (IOException e) {throw new RuntimeException(e);}finally {try {if(fileWriter!=null) {fileWriter.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
(2)拷贝文件
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class Test2 {public static void main(String[] args) {String srcFilePath="D:\\javacode\\javacode\\IO_1\\happy.txt";//源路径String destFilePath="D:\\javacode\\javacode\\IO_1\\happy2.txt";//拷贝路径FileReader fileReader=null;FileWriter fileWriter=null;try {fileReader=new FileReader(srcFilePath);//创建字符输入流对象fileWriter=new FileWriter(destFilePath);//创建字符输出流对象char []buf=new char[8];int readLen=0;while((readLen=fileReader.read(buf))!=-1){fileWriter.write(buf,0,readLen);}System.out.println("拷贝完成~");} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭流,释放资源try {if(fileWriter!=null) {fileWriter.close();}if(fileReader!=null){fileReader.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
四、节点流和处理流
4.1基本介绍
(1)节点流可以从一个特定的数据源读写数据,例如:FileReader、FileWriter.
(2)处理流(也叫包装流)是"连接"在已存在的流(节点流和处理流)之上,为程序提供更为强大的读写功能;例如:BufferedReader,BufferedWriter.
4.2节点流和处理流一览图
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
节点流 | ||||
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
访问字符串 | StringReader | StringWriter | ||
处理流 | ||||
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
抽象基类 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
推回输入流 | PushbackInputStream | PushbackReader | ||
特殊流 | DataInputStream | DataOutputStream |
4.3节点流和处理流的区别与联系
(1)节点流是底层流/低级流,直接跟数据源相连;
(2)处理流(包装流)包装节点流,即可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出;
(3)处理流(包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连(模拟修饰器设计模式)。
4.4处理流的功能主要体现在以下两个方面
(1)性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
(2)操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便。
4.5BufferedReader和BufferedWriter
4.5.1基本介绍
BufferedReader和BufferedWriter属于字符流,是按照字符来读取数据的;
关闭处理流时,只需关闭外层流即可。
4.5.2常用方法
(1)BufferedReader
①readLine()
按行读取文件,效率高
当返回null 时,表示文件读取完毕。
注意:: readLine 读取一行内容,但是没有换行
(2)BufferedWriter
①newLine()
插入一个和系统相关的换行。
4.5.2使用案例
(1)用BufferedReader读取文件
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class Test3 {public static void main(String[] args) {String path="D:\\javacode\\javacode\\IO_1\\BufRead.txt";String line=null;BufferedReader bufferedReader=null;try {bufferedReader=new BufferedReader(new FileReader(path));//包装流//1. bufferedReader.readLine() 是按行读取文件//2. 当返回null 时,表示文件读取完毕while((line=bufferedReader.readLine())!=null){System.out.println(line);}} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭流, 这里注意,只需要关闭 BufferedReader ,因为底层会自动的去关闭节点流FileReader.try {if(bufferedReader!=null) {bufferedReader.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
(2) 用BufferedWriter写入文件
import java.io.*;public class Test4 {public static void main(String[] args) {String path = "D:\\javacode\\javacode\\IO_1\\BufWriter.txt";//写入路径String str = "悟已往之不谏,知来者之可追!";//写入内容BufferedWriter bufferedWriter=null;try {bufferedWriter = new BufferedWriter(new FileWriter(path,true));//包装流bufferedWriter.write(str);bufferedWriter.newLine();//换行bufferedWriter.write(str);} catch (IOException e) {throw new RuntimeException(e);} finally {//关闭流, 这里注意,只需要关闭 BufferedWriter ,因为底层会自动的去关闭节点流FileWriter.try {if (bufferedWriter != null) {bufferedWriter.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
(3)用BufferedReader和BufferedWriter拷贝文件
import java.io.*;public class Copy_Buf {public static void main(String[] args) {String srcPath="D:\\javacode\\javacode\\IO_1\\happy.txt";//源路径String destPath="D:\\javacode\\javacode\\IO_1\\happy_buf.txt";//拷贝路径BufferedReader bufferedReader=null;BufferedWriter bufferedWriter=null;String dateLine=null;try{bufferedReader=new BufferedReader(new FileReader(srcPath));//创建包装流对象bufferedWriter=new BufferedWriter(new FileWriter(destPath));while((dateLine=bufferedReader.readLine())!=null){bufferedWriter.write(dateLine);//写入读取的每一行数据bufferedWriter.newLine();//换行}System.out.println("拷贝成功~");} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭流, 这里注意,只需要关闭 BufferedWriter、BufferedReader ,因为底层会自动的去关闭节点流FileWriter、FileReader.try {if(bufferedReader!=null) {bufferedReader.close();}if(bufferedWriter!=null){bufferedWriter.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
4.6 BufferedInputStream 和 BufferedOutputStream
4.6.1基本介绍
(1)BufferedInputStream是字节流,在创建BufferedInputStream对象时,会创建一个内部缓冲区数组。
(2)BufferedOutputStream是字节流,实现缓冲的输出流,可以将多个字节写入底层输出流中,而不必每次字节写入调用底层系统。
4.6.2使用案例
拷贝图片
import java.io.*;public class Copy_Stream {public static void main(String[] args) {String srcFilepath="D:\\javacode\\javacode\\IO_1\\mysql_1.jpg";//源路径String destFilepath="D:\\javacode\\javacode\\IO_1\\mysql_3.jpg";//拷贝路径BufferedInputStream bufferedInputStream=null;BufferedOutputStream bufferedOutputStream=null;byte[] buff = new byte[1024];//用于存放读取到的数据int readLen = 0;//实际读取到的字节数try {bufferedInputStream=new BufferedInputStream(new FileInputStream(srcFilepath));bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(destFilepath));while((readLen=bufferedInputStream.read(buff))!=-1){//当返回-1 时,就表示文件读取完毕bufferedOutputStream.write(buff,0,readLen);//将读取到的数据写入指定路径}System.out.println("拷贝0k~");} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭流, 这里注意,只需要关闭 BBufferedInputStream、BufferedOutputStream,// 因为底层会自动的去关闭节点流FileInputStream、FileOutputStreamtry {if(bufferedInputStream!=null) {bufferedInputStream.close();}if(bufferedOutputStream!=null){bufferedOutputStream.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
4.7对象流:ObjectInputStream 和 ObjectOutputStream
4.7.0序列化与反序列化
(1)序列化就是在保持数据时,保存数据的值和数据类型。
(2)反序列化就是再恢复数据时,恢复数据的值和数据类型。
(3)如果需要让某个对象支持序列化和反序列化机制,则必须让其所在的类是可序列化的。
为了让某个类是可序列化的,该类必须实现如下两个接口之一:
①Serializable:只是一个标记接口,没有方法
②Externalizaable:该接口有方法需要实现,故一般实现Serializable接口。
4.7.1基本介绍
功能:提供了对基本类型或对象类型的序列化和反序列化的方法。
ObjectOutputStream 提供 序列化功能
ObjectInputStream 提供 反序列化功能
4.7.2使用案例
(1)用ObjectOutputStream进行数据的序列化
import java.io.*;public class Test1 {public static void main(String[] args) {Cat cat = new Cat("小黄", 5);//int year=2025;String path="D:\\javacode\\javacode\\IO_1\\cat.dat";//写入路径ObjectOutputStream objectInputStream=null;try {objectInputStream=new ObjectOutputStream(new FileOutputStream(path));objectInputStream.writeObject(cat);//写入一个Cat对象objectInputStream.writeInt(year);//写入一个int型整数} catch (IOException e) {throw new RuntimeException(e);}finally {//关闭流try {if (objectInputStream!=null) {objectInputStream.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}class Cat implements Serializable {private String name;private int age;public Cat(String name, int age) {this.name = name;this.age = age;}
}
(2) 用ObjectInputStream进行反序列化
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class Test2 {public static void main(String[] args) {String path="D:\\javacode\\javacode\\IO_1\\cat.dat";//读取路径ObjectInputStream objectInputStream=null;try {objectInputStream=new ObjectInputStream(new FileInputStream(path));//注意读取顺序需以序列化顺序一致System.out.println(objectInputStream.readObject());System.out.println(objectInputStream.readInt());} catch (IOException | ClassNotFoundException e) {throw new RuntimeException(e);}finally {//关闭流try {if(objectInputStream!=null) {objectInputStream.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
4.7.3注意事项
(1)读写顺序必须一致;
(2)要求实现序列化或反序列化对象,需要实现Serializable;
(3)序列化的类中建议添加SerialVersionUID,为了提高版本兼容性;
(4)序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的对象。
(5)序列化对象时,要求里面属性的类型也需要实现序列化接口;
(6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也默认实现了序列化。
4.8标准输入输出流
4.8.1基本介绍
介绍 | 类型 | 默认设备 |
---|---|---|
System.in 标准输入 | InputStream | 键盘 |
System.out 标准输出 | PrintStream | 显示器 |
4.8.2使用案例
就是平常使用的System.out.println(),将对象数据输出到显示器。
4.9转换流:InputStreamReader 和 OutputStreamWriter
4.9.1基本介绍
(1)InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成Reader(字符流)。
(2)OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)。
(3)当处理纯文本数据时,使用字符流效率更高,并且可以有效解决中文问题,所以建议字节流转换成字符流。
(4)可以在使用时指定编码格式,例如:utf-8、gbk等。
4.9.2使用案例
import java.io.*;public class Test3 {public static void main(String[] args) {String path="D:\\javacode\\javacode\\IO_1\\happy.txt";BufferedReader bufferedReader=null;try {bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(path)));//将InputStream转换为Read,再用包装流BufferedReader处理String data=null;while((data=bufferedReader.readLine())!=null){System.out.println(data);}} catch (IOException e) {throw new RuntimeException(e);}finally {try {if(bufferedReader!=null) {bufferedReader.close();}} catch (IOException e) {throw new RuntimeException(e);}}}
}
4.10打印流:PrintStream和PrintWriter
4.10.1基本介绍
(1)打印流只有输出流,没有输入流;
(2)
4.10.2使用方式
(1)PrintWriter 使用方式
①PrintWriter(System.out);
标准输出,即显示器。
②new PrintWriter(new FileWriter(path));
指定输出数据的位置为path。
(2)PrintStream使用方式
在默认情况下,PrintStream 输出数据的位置是 标准输出,即显示器
4.10.3使用案例
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;public class Test4 {public static void main(String[] args) {String path="D:\\javacode\\javacode\\IO_1\\out.txt";//打印流输出的位置PrintWriter printWriter=null;PrintStream printStream=System.out;// //在默认情况下,PrintStream 输出数据的位置是 标准输出,即显示器printStream.println("hello 2025");//如同System.out.println("hello 2025");try {printWriter=new PrintWriter(new FileWriter(path));//这样使用同字符流printWriter.print("hello");//将hello写到path路径} catch (IOException e) {throw new RuntimeException(e);}finally {printWriter.close();}}
}
五、Properties 类
5.1基本介绍
(1)专门用于读写配置文件的集合类。
配置文件的格式: 键=值
(2)注意:键值对不需要有空格,值不需要用引号括起来,默认类型是String
5.2常用方法
(1)load:加载配置文件的键值对到Properties对象;
(2)list:将数据显示到指定设备;
(3)getProperty(key):根据键获取值;
(4)setProperty(key,value):设置键值对到Properties对象;
(5)store:将Properties中的键值对存储到配置文件,在IDEA中,保存信息到配置文件,如果有中文,会存储为Unicode码
结语
感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!
路漫漫其修远兮,吾将上下而求索。