2024年大数据最全Java知识点--IO流(下),2024年最新大数据开发最新实习面试经验总结

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

}


##### 2️⃣使用BufferedWriter将 “hello”,写入文件中



import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Exercise09 {
public static void main(String[] args) throws IOException {
//1.确定文件路径
String filePath = “e:\a9.txt”;
//2.引入BufferedWriter
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));
//3. 写入"hello"
bufferedWriter.write(“hello”);
//4.关闭外层流
bufferedWriter.close();
}
}


##### 3️⃣使用BufferedReader 和 BufferedWriter完成文本文件拷贝



import java.io.*;

public class Exercise10 {
public static void main(String[] args) throws IOException {
//1. BufferedReader 和 BufferedWriter 是按照字符操作
//2. 不要去操作 二进制文件[声音,视频,doc, pdf], 可能造成文件损坏
String filePath = “e:\a9.txt”;
String newFilePath = “e:\a10.txt”;
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(newFilePath));
String s;
//说明: readLine 读取一行内容,但是没有换行
while ((s = bufferedReader.readLine()) != null){
//每读取一行,就写入
bufferedWriter.write(s);
//插入一个换行
bufferedWriter.newLine();
}
//关闭流
bufferedReader.close();
bufferedWriter.close();
}
}


### 🎇三、处理流 – BufferedInputStream 和 BufferedOutputStream


`BufferedInputStream` 和 `BufferedOutputStream`属于字节流,是按照字节来读写数据的,关闭处理流时,只需关闭外层流即可。


##### 1️⃣使用BufferedInputStream 和 BufferedOutputStream完成图片的拷贝



import java.io.*;
//字节流可以操作二进制文件,也可以操作文本文件
public class Exercise11 {
public static void main(String[] args) throws IOException {
String filePath = “e:\3.jpg”;
String newFilePath = “e:\4.jpg”;
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(newFilePath));
byte[] arr = new byte[1024];
int readLen = 0;
//当返回 -1 时,就表示文件读取完毕
while ((readLen = bufferedInputStream.read(arr)) != -1) {
bufferedOutputStream.write(arr,0,readLen);
}
//关闭流 , 关闭外层的处理流即可,底层会去关闭节点流
bufferedInputStream.close();
bufferedOutputStream.close();
}
}


### 🧨四、对象流 – ObjectInputStream 和 ObjectOutputStream


##### 1️⃣看一个需求


1.将int num=100这个 int数据保存到文件中,注意不是 100 数字,而是 int 100,并且,能够从文件中直接恢复 int 100  
 2. 将 Dog dog = new Dog(“小黄”,3)这个 dog对象 保存到 文件中,并且能够从文件恢复.  
 3.上面的要求,就是能够将 基本数据类型 或者 对象 进行 `序列化` 和 `反序列化`操作


##### 2️⃣序列化和反序列化


1.`序列化`就是在保存数据时,保存数据的值和数据类型  
 2.`反序列化`就是在恢复数据时,恢复数据的值和数据类型  
 3.需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一:  
 `Serializable` //这是一个标记接口,没有方法  
 `Externalizable`//该接口有方法需要实现,因此我们一般实现上面的 Serializable接口


##### 3️⃣对象流介绍


功能:提供了对基本类型或对象类型的序列化和反序列化的方法  
 `ObjectOutputStream` 提供 `序列化`功能  
 `ObjectInputStream` 提供 `反序列化`功能


##### 4️⃣使用ObjectOutputStream序列化基本数据类型和Dog对象



import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Exercise12 {
public static void main(String[] args) throws IOException {
String filePath = “e:\a12.txt”;
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(filePath));
objectOutputStream.writeInt(100);
objectOutputStream.writeBoolean(true);
objectOutputStream.writeChar(‘a’);
objectOutputStream.writeDouble(12.5);
objectOutputStream.writeUTF(“hello”);
objectOutputStream.writeObject(new Dog(“tom”, 3));
objectOutputStream.close();
}
}

public class Dog implements Serializable {
private String name;
private int age;

public Dog(String name, int age) {
    this.name = name;
    this.age = age;
}

@Override
public String toString() {
    return "Dog{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

}


##### 5️⃣使用ObjectInputStream反序列化恢复数据



import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class Exercise13 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
String filePath = “e:\a12.txt”;
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(filePath));
System.out.println(objectInputStream.readInt());
System.out.println(objectInputStream.readBoolean());
System.out.println(objectInputStream.readChar());
System.out.println(objectInputStream.readDouble());
System.out.println(objectInputStream.readUTF());
System.out.println(objectInputStream.readObject());
objectInputStream.close();
}
}


##### 6️⃣注意事项和细节说明


1)读写顺序要一致  
 2)要求序列化或反序列化对象 ,需要 实现 `Serializable`  
 3)序列化的类中建议添加`SerialVersionUID`,为了提高版本的兼容性  
 4)序列化对象时,默认将里面所有属性都进行序列化,但除了`static`或`transient`修饰的成员  
 5)序列化对象时,要求里面属性的类型也需要实现序列化接口  
 6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化


### ✨五、标准输入输出流




| \ | 类型 | 默认设备 |
| --- | --- | --- |
| System.in 标准输入 | InputStream | 键盘 |
| System.out 标准输出 | PrintStream | 显示器 |


### 🎉六、转换流 – InputStreamReader 和 OutputStreamWriter


##### 1️⃣引入转换流的原因


1、IDEA中默认以UTF-8编码续取文件。  
 2、如果文件是以gbk编码保存的,以UTF-8读取可能会出现乱码,因此需要转换流。  
 3、转换流可以将字节流转换成字符流。  
 4、在处理纯文本数据时,使用字符流效率更高,也可以解决中文问题,所以建议将字节流转换成字符流。  
 5、可以在使用时指定编码格式。


##### 2️⃣介绍InputStreamReader 和 OutputStreamWriter


1. InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成(转换)Reader(字符流)  
 2.OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)


##### 3️⃣用InputStreamReader读取文件,指定gbk编码



import java.io.*;

public class Exercise14 {
public static void main(String[] args) throws IOException {
String filePath = “e:\a10.txt”;
//1. 把 FileInputStream 转成 InputStreamReader
//2. 指定编码 gbk
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(filePath), “gbk”);
//3. 把 InputStreamReader 传入 BufferedReader
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String s;
//4. 读取
while ((s = bufferedReader.readLine()) != null){
System.out.println(s);
}
//5. 关闭外层流
bufferedReader.close();
}
}


##### 4️⃣用OutputStreamWriter写入文件,指定gbk编码



import java.io.*;

public class Exercise15 {
public static void main(String[] args) throws IOException {
String filePath = “e:\a15.txt”;
OutputStreamWriter gbk = new OutputStreamWriter(new FileOutputStream(filePath), “gbk”);
gbk.write(“hello,world”);
gbk.close();
}
}


### 🎊七、打印流 – PrintStream 和 PrintWriter


打印流只有输出流,PrintStream是字节流,PrintWriter是字符流。


##### 1️⃣用PrintStream写入数据



import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

public class PrintStream_ {
public static void main(String[] args) throws FileNotFoundException {
String filePath = “e:\m1.txt”;
PrintStream printStream = new PrintStream(new FileOutputStream(filePath));
printStream.println(“hello”);
printStream.close();
}
}


##### 2️⃣用PrintWriter写入数据



import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class PrintWriter_ {
public static void main(String[] args) throws IOException {
String filePath = “e:\t2.txt”;
PrintWriter printWriter = new PrintWriter(new FileWriter(filePath));

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

[外链图片转存中…(img-DOmZpxq2-1715593372955)]
[外链图片转存中…(img-hUtTYdDp-1715593372955)]
[外链图片转存中…(img-XLcVoRfl-1715593372955)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值