文件流
文件在程序中以留的形式来操作的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nXoI6Vnc-1642335857608)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20211225185941350.png)]
new File只是在内存,create才会
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-voc1MClj-1642335857609)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115170359733.png)]
实例
三种创建方法
// new File(String pathname)
@Test
void create01() {
String filePath = "G:\\news.txt";
File file = new File(filePath);
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
// new File(File parent,String child)
@Test
void create02() {
try {
new File("G:\\","news2.txt").createNewFile();
System.out.println("创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
// new File(String parent, String child)
void create03() {
try {
new File("G:\\","news2.txt").createNewFile();
System.out.println("创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
// 创建文件对象
File file = new File("g:\\news.txt");
//获取文件名
System.out.println(file.getName());
// 获取绝对路径
System.out.println(file.getAbsolutePath());
// 获取文件父级目录
System.out.println(file.getParent());
// 获取文件大小
System.out.println(file.length());
// 判断文件是否存在
System.out.println(file.exists());
// 是不是一个文件
System.out.println(file.isFile());
// 是不是一个目录
System.out.println(file.isDirectory());
@Test
void m1() {
String filePath = "g:\\news.txt";
File file = new File(filePath);
if (file.exists()) {
if (file.delete()) {
System.out.println(filePath + "删除成功");
}else {
System.out.println(filePath + "删除失败");
}
}else {
System.out.println("文件不存在....");
}
}
// 判断demo02是否存在如果存在就删除,不存在则提示不存在
@Test
void m2() {
String filePath = "g:\\demo02";
File file = new File(filePath);
if (file.exists()) {
if (file.delete()) {
System.out.println(filePath + "删除成功");
}else {
System.out.println("");
}
}else {
System.out.println("文件不存在....");
}
}
// 判断demo02\\a\\b\\c是否存在如果存在就提示,否则就创建
@Test
void m3() {
String filePath = "g:\\demo02\\a\\b\\c";
File file = new File(filePath);
if (file.exists()) {
System.out.println("存在");
}else {
file.mkdirs();
System.out.println("文件不存在....已经创建");
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xxAxHKHr-1642335857610)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115173911516.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94ThiL69-1642335857610)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115174010807.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pv42BNAr-1642335857610)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115174213958.png)]
小结:以下四个均为抽象类,都需要调用他们的实现子类
流就像一个外卖小哥,做运送东西
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FRZyik0I-1642335857611)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115174717724.png)]
是所有类字节输入流的超类
InputStream常用的子类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2UoHUgwm-1642335857611)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115175054464.png)]
方法概要
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JNyQz3fi-1642335857611)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115181529572.png)]
read()如果直接调用则是一个一个去读取,中文一个占三个字节,故会出现乱码
并且效率极低
String filePath = "G:\\news2.txt";
int readData = 0;
InputStream inputStream = null;
try {
inputStream = new FileInputStream(filePath);
while ((readData = inputStream.read()) != -1) {
System.out.print((char) readData); //转换成char显示
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
采用read(byte[] byte)去优化一次性读取一个应该的长度的
String filePath = "G:\\news2.txt";
int readLen = 0;
byte[] bytes = new byte[8];
InputStream inputStream = null;
try {
inputStream = new FileInputStream(filePath);
while ((readLen = inputStream.read(bytes)) != -1) {
System.out.print(new String(bytes,0,readLen)); //并且不会出现乱码
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KO5aEv1u-1642335857612)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115184043704.png)]
write()方法
写单个字符但是以这种方式创建都会刷新文件,如果不想刷新文件,从后面直接写入,则
fileOutputStream = new FileOutputStream(filePath,true);
代码
String filePath = "g:\\a.txt";
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(filePath,true);
// 可以以单个字符写入
// 如果这样创建每次写入内容,会覆盖原来的内容
// fileOutputStream.write('H');
// fileOutputStream.write("HelloWorld".getBytes());
// fileOutputStream.write("HelloWorld".getBytes(),0,3);
fileOutputStream.write("HelloWorld".getBytes());
System.out.println("写入成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3pHXhFIW-1642335857612)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115185614935.png)]
String inputFilePath = "F:\\ps教学文件\\猫猫\\1.jpg";
String outFilePath = "F:\\ps教学文件\\猫猫\\wc.jpg";
FileOutputStream fileOutputStream = null;
FileInputStream fileInputStream = null;
byte[] buf = new byte[1024];
int readLength = 0;
try {
fileInputStream = new FileInputStream(inputFilePath);
fileOutputStream = new FileOutputStream(outFilePath,true);
while ((readLength = fileInputStream.read(buf)) != -1) { //避免一下写入,
fileOutputStream.write(buf,0,readLength); //一定要这样写,避免图片精度丢失
}
System.out.println("文件拷贝成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fileInputStream != null) {
fileInputStream.close();
}
if (fileOutputStream!=null) {
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOMlUJOM-1642335857612)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115191852029.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wqk6WA4J-1642335857612)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115192330521.png)]
String filePath = "g:\\story.txt";
FileReader fileReader = null;
int data = 0;
try {
fileReader = new FileReader(filePath);
while ((data = fileReader.read()) != -1) {
System.out.print((char)data);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fileReader!=null){
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出
package com.mohan.io;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
@Test
public void test() {
String inputFilePath = "F:\\ps教学文件\\猫猫\\1.jpg";
String outFilePath = "F:\\ps教学文件\\猫猫\\wc.jpg";
FileOutputStream fileOutputStream = null;
FileInputStream fileInputStream = null;
byte[] buf = new byte[1024];
int readLength = 0;
try {
fileInputStream = new FileInputStream(inputFilePath);
fileOutputStream = new FileOutputStream(outFilePath,true);
while ((readLength = fileInputStream.read(buf)) != -1) {
fileOutputStream.write(buf,0,readLength);
}
System.out.println("文件拷贝成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fileInputStream != null) {
fileInputStream.close();
}
if (fileOutputStream!=null) {
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
采用字节组
@Test
void readFile02() {
String filePath = "g:\\story.txt";
FileReader fileReader = null;
char[] buf = new char[8];
int readLen = 0;
try {
fileReader = new FileReader(filePath);
while ((readLen = fileReader.read(buf)) != -1) {
System.out.print(new String(buf,0,readLen));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0dXvSp1-1642335857613)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115192545351.png)]
必须close!!!
String filePath = "g:\\note.txt";
FileWriter fileWriter = null;
char[] chars = {'a','b','c'};
try {
fileWriter = new FileWriter(filePath);
// 3. write(int) 写入单个字符
fileWriter.write('H');
// 4. write(char[]): 写入指定数组
fileWriter.write(chars); //默认是覆盖
// write(char[],off,len):写入指定部分
fileWriter.write("莫韩寒".toCharArray(),0,3);
// write(String) :写入整个字符串
fileWriter.write("你好啊北京");
// write(string,off,len):写入字符串指定部分
fileWriter.write("上海添加",0,2);
// 在数据量比较大的时候采用循环才做
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjGDjyo8-1642335857613)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115230827494.png)]
如果是有字符串输入输出则用FileReader/FileWriter
如果是二进制文件则采用FileputStream/FileOutputStream
包装流,
其实是对Reader的一个包装,提供给开发者更强大的功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjKKw7lQ-1642335857613)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115231117047.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDYdwLWj-1642335857614)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220115231401496.png)]
只要是Reader的子类就可以进行操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wIL7qvcj-1642335857614)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116095259352.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A4MXwgUN-1642335857614)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116095323508.png)]
方法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nEQs7G9w-1642335857615)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116155515086.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7FCkYQg0-1642335857615)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116154936417.png)]
!!! 尽量读取文本文件,如果是二进制文件,则可能会出现文件损失
readLine 按行读取
String filePath = "g:\\a.java";
BufferedReader bufferedReader = null;
try {
// 创建BufferedReader
bufferedReader = new BufferedReader(new FileReader(filePath));
// 读取
String line; //按行读取,效率高
// 说明
// 1. bufferedReader.readLine(); 按行读取文件
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
为什么只需要关闭外层的close()就可以关闭了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wRBAxVrs-1642335857615)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116160221054.png)]
实际上是去调用了一次FileReader的close()
直接写入就行了
String filePath = "g:\\ok.txt";
// 创建BufferdWriter
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath,true));
for (int i = 0; i < 10; i++) {
bufferedWriter.write("你好啊,陈采慧!");
bufferedWriter.newLine();
bufferedWriter.write("你好啊,小胖子!");
bufferedWriter.write("你好啊,唐树泽!");
}
// 直接关闭最外层就行了
bufferedWriter.close();
String srcFilePath = "G:\\a.java";
String outputFilePath = "G:\\a2.java";
BufferedWriter bufferedWriter = null;
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(srcFilePath));
bufferedWriter = new BufferedWriter(new FileWriter(outputFilePath));
String readLine;
while ((readLine = bufferedReader.readLine())!=null) {
bufferedWriter.write(readLine);
bufferedWriter.newLine();
}
System.out.println("完成拷贝...");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedWriter!=null) {
bufferedWriter.close();
}
if (bufferedReader!=null) {
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
切记不要拷贝二进制文件!!! 比如声音,视频,doc, pdf等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UW7vtpML-1642335857615)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116170218624.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbDrwfNE-1642335857616)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116172948282.png)]
public interface Serializable {
} //标记接口
Externalizable //有方法需要实现,因此我们一般需要实现上面的Serializable接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yDE2n5Kv-1642335857616)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116173253866.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1jzamIv0-1642335857616)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116173419463.png)]
如果不加则抛出异常
java.io.NotSerializableException
序列化输出到文件
public class ObjectOutStream_ {
public static void main(String[] args) throws IOException {
// 序列化之后,保存的文件格式,不是存文本,二手按照他的格式来保存
String filePath = "g:\\data.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
// 序列化数据到g:\data.dat
oos.write(100); //int -> Integer (实现了 Serializable)
oos.writeBoolean(true); //boolean -> Boolean (实现了 Serializable)
oos.writeChar('a'); //char -> Character (实现了 Serializable)
oos.writeDouble(9.5) ; // double -> Double (实现了 Serializable)
oos.writeUTF("莫寒寒来咯!"); //String
oos.writeObject(new Dog("旺财",10));
oos.close();
System.out.println("序列化输出成功...");
}
}
class Dog implements Serializable {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
反序列化读取文件
// 指定序列化文件
String filePath = "g:\\data.dat";
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
// 读取
// 1. 读取反序列化的顺序需要和保存数据序列化的顺序一致
// 2. 否则会出异常
System.out.println(ois.readInt());
System.out.println(ois.readBoolean());
System.out.println(ois.readChar());
System.out.println(ois.readDouble());
System.out.println(ois.readUTF());
Object dog = ois.readObject();
Dog dog1 = (Dog) dog;
System.out.println(dog1);
ois.close();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7rX7VuI1-1642335857616)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116181127640.png)]
必须读取一致,否则抛出异常
必须去实现,否则抛出异常
是序列化
// 序列化的版本号,可以提高兼容性
private static final long serialVersionUID = 1L;
序列化的时候不会保存静态和短暂的字段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QN2z75Vl-1642335857617)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116181852387.png)]
序列化里边的必须也要实现序列化接口
序列化有继承性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7a2RDXW-1642335857617)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116182205991.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qAo2Fmgg-1642335857617)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116182314842.png)]
编译类型 InputStream
public final static InputStream in = null;
运行类型 BufferedInputStream
System.out.println(System.in.getClass());
输出
class java.io.BufferedInputStream
编译类型 PrintStream
public final static PrintStream out = null;
运行类型 PrintStream
class java.io.PrintStream
表示标准输出: 显示器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qq2VHAc9-1642335857617)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116183207126.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItzUKfmp-1642335857618)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116184420722.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A7EruoDN-1642335857618)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116184357463.png)]
String filePath = "G:\\ok2.txt";
// 先把FileInputStream转成InputStreamReader,指定编码为gbk
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(filePath),"gbk");
// 把InputStreamReader 传入BufferedReader
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
简化
BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oDHrrnES-1642335857618)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116184622428.png)]
打印流只有输出,没有输入流
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sU9igajz-1642335857618)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116190528709.png)]
Modifier and Type | Method and Description |
---|---|
PrintStream |
append(char c) 将指定的字符附加到此输出流。 |
PrintStream |
append(CharSequence csq) 将指定的字符序列附加到此输出流。 |
PrintStream |
append(CharSequence csq, int start, int end) 将指定字符序列的子序列附加到此输出流。 |
boolean |
checkError() 刷新流并检查其错误状态。 |
protected void |
clearError() 清除此流的内部错误状态。 |
void |
close() 关闭流。 |
void |
flush() 刷新流。 |
PrintStream |
format(Locale l, String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入此输出流。 |
PrintStream |
format(String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入此输出流。 |
void |
print(boolean b) 打印布尔值。 |
void |
print(char c) 打印一个字符 |
void |
print(char[] s) 打印字符数组。 |
void |
print(double d) 打印双精度浮点数。 |
void |
print(float f) 打印浮点数。 |
void |
print(int i) 打印一个整数。 |
void |
print(long l) 打印一个长整数。 |
void |
print(Object obj) 打印一个对象。 |
void |
print(String s) 打印字符串。 |
PrintStream |
printf(Locale l, String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入此输出流的便利方法。 |
PrintStream |
printf(String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入此输出流的便利方法。 |
void |
println() 通过写入行分隔符字符串来终止当前行。 |
void |
println(boolean x) 打印一个布尔值,然后终止该行。 |
void |
println(char x) 打印一个字符,然后终止该行。 |
void |
println(char[] x) 打印一个字符数组,然后终止该行。 |
void |
println(double x) 打印一次,然后终止行。 |
void |
println(float x) 打印一个浮点数,然后终止该行。 |
void |
println(int x) 打印一个整数,然后终止行。 |
void |
println(long x) 打印很长时间,然后终止行。 |
void |
println(Object x) 打印一个对象,然后终止该行。 |
void |
println(String x) 打印一个字符串,然后终止行。 |
protected void |
setError() 将流的错误状态设置为 true 。 |
void |
write(byte[] buf, int off, int len) 从指定的字节数组写入 len 个字节,从偏移 off 开始到此流。 |
void |
write(int b) 将指定的字节写入此流。 |
print源码
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lUgE8yxk-1642335857619)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116191725421.png)]
PrintWriter |
append(char c) 将指定的字符附加到此作者。 |
---|---|
PrintWriter |
append(CharSequence csq) 将指定的字符序列附加到此作者。 |
PrintWriter |
append(CharSequence csq, int start, int end) 将指定字符序列的子序列附加到此作者。 |
boolean |
checkError() 如果流未关闭,请刷新流并检查其错误状态。 |
protected void |
clearError() 清除此流的错误状态。 |
void |
close() 关闭流并释放与之相关联的任何系统资源。 |
void |
flush() 刷新流。 |
PrintWriter |
format(Locale l, String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入此写入程序。 |
PrintWriter |
format(String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入此写入程序。 |
void |
print(boolean b) 打印布尔值。 |
void |
print(char c) 打印一个字符 |
void |
print(char[] s) 打印字符数组。 |
void |
print(double d) 打印双精度浮点数。 |
void |
print(float f) 打印浮点数。 |
void |
print(int i) 打印一个整数。 |
void |
print(long l) 打印一个长整数。 |
void |
print(Object obj) 打印一个对象。 |
void |
print(String s) 打印字符串。 |
PrintWriter |
printf(Locale l, String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入该writer的方便方法。 |
PrintWriter |
printf(String format, Object... args) 使用指定的格式字符串和参数将格式化的字符串写入该writer的方便方法。 |
void |
println() 通过写入行分隔符字符串来终止当前行。 |
void |
println(boolean x) 打印一个布尔值,然后终止该行。 |
void |
println(char x) 打印一个字符,然后终止该行。 |
void |
println(char[] x) 打印字符数组,然后终止行。 |
void |
println(double x) 打印双精度浮点数,然后终止行。 |
void |
println(float x) 打印一个浮点数,然后终止该行。 |
void |
println(int x) 打印一个整数,然后终止该行。 |
void |
println(long x) 打印一个长整型,然后终止行。 |
void |
println(Object x) 打印一个对象,然后终止该行。 |
void |
println(String x) 打印一个字符串,然后终止行。 |
protected void |
setError() 表示发生错误。 |
void |
write(char[] buf) 写入一个字符数组。 |
void |
write(char[] buf, int off, int len) 写一个字符数组的一部分。 |
void |
write(int c) 写一个字符 |
void |
write(String s) 写一个字符串 |
void |
write(String s, int off, int len) 写一个字符串的一部分。 |
标准用法
PrintWriter printWriter = new PrintWriter(System.out);
System.out.println("你好啊北京");
printWriter.close();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55rjxS0L-1642335857619)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116193057296.png)]
传统的方式去
BufferedReader br = new BufferedReader(new FileReader("src\\mysql.properties"));
String line = "";
while ((line = br.readLine()) != null) {
String[] split = line.split("=");
System.out.println(split[1]);
}
br.close();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItclVowm-1642335857620)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116194040715.png)]
Modifier and Type | Method and Description |
---|---|
String |
getProperty(String key) 使用此属性列表中指定的键搜索属性。 |
String |
getProperty(String key, String defaultValue) 使用此属性列表中指定的键搜索属性。 |
void |
list(PrintStream out) 将此属性列表打印到指定的输出流。 |
void |
list(PrintWriter out) 将此属性列表打印到指定的输出流。 |
void |
load(InputStream inStream) 从输入字节流读取属性列表(键和元素对)。 |
void |
load(Reader reader) 以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。 |
void |
loadFromXML(InputStream in) 将指定输入流中的XML文档表示的所有属性加载到此属性表中。 |
Enumeration> |
propertyNames() 返回此属性列表中所有键的枚举,包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。 |
void |
save(OutputStream out, String comments) 已弃用 如果在保存属性列表时发生I / O错误,此方法不会抛出IOException。 保存属性列表的store(OutputStream out, String comments) 方法是通过store(OutputStream out, String comments) 方法或storeToXML(OutputStream os, String comment) 方法。 |
Object |
setProperty(String key, String value) 致电 Hashtable 方法 put 。 |
void |
store(OutputStream out, String comments) 将此属性列表(键和元素对)写入此 Properties 表中,以适合于使用 load(InputStream) 方法加载到 Properties 表中的格式输出流。 |
void |
store(Writer writer, String comments) 将此属性列表(键和元素对)写入此 Properties 表中,以适合使用 load(Reader) 方法的格式输出到输出字符流。 |
void |
storeToXML(OutputStream os, String comment) 发出表示此表中包含的所有属性的XML文档。 |
void |
storeToXML(OutputStream os, String comment, String encoding) 使用指定的编码发出表示此表中包含的所有属性的XML文档。 |
Set |
stringPropertyNames() 返回此属性列表中的一组键,其中键及其对应的值为字符串,包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。 |
set的方法的底层其实是个hashTable,不允许重复,如果存在,则替换
读
// 1. 创建一个Properties对象
Properties properties = new Properties();
// 2. 加载指定配置文件
properties.load(new FileReader("src\\mysql.properties"));
// 3. 把k-v显示到控制台
properties.list(System.out);
// 4. 根据key 获取对应的值
String user = properties.getProperty("user");
String password = properties.getProperty("password");
System.out.println(user);
System.out.println(password);
写
// 使用Properties类来创建配置文件, 修改配置文件的内容
Properties properties = new Properties();
properties.setProperty("charset","utf8");
properties.setProperty("user","陈采慧");
properties.setProperty("passwrd","123456");
properties.setProperty("user","莫寒寒");
properties.store(new FileOutputStream("src\\mysql2.properties"),"hello world");
System.out.println("保存文件成功");
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EDKFXlZP-1642335857620)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116195908445.png)]
String filePath = "e:\\mytemp";
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
String fileUrl = filePath + "\\hello.txt";
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter(fileUrl));
bufferedWriter.write("hello,world~");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}else {
System.out.println("文件夹已经存在");
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EIGxoB2-1642335857620)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116195813474.png)]
String urlPath = "g:\\ok.txt";
BufferedReader br = null;
br = new BufferedReader(new FileReader(urlPath));
String readValue;
int line = 0;
while ((readValue = br.readLine()) != null) {
line++;
System.out.println("第" + line +"行:" + readValue);
}
br.close();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hajeQ1t2-1642335857621)(F:\人生苦短,我用IO流\笔记区域\Java-io.assets\image-20220116195847825.png)]
Properties properties = new Properties();
properties.load(new FileReader("src\\dog.properties"));
String name = properties.getProperty("name");
int age = Integer.parseInt(properties.getProperty("age"));
String color = properties.getProperty("color");
Dog dog = new Dog(name, age, color);
System.out.println(dog);
import java.io.Serializable;
public class Dog implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String color;
public Dog(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
", color='" + color + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
rseInt(properties.getProperty(“age”));
String color = properties.getProperty(“color”);
Dog dog = new Dog(name, age, color);
System.out.println(dog);
```java
import java.io.Serializable;
public class Dog implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String color;
public Dog(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
", color='" + color + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}