一.整体架构
1.整体架构图
2.整体架构概述
①File类简述
/*
1.File类的概述
每一个对象都对应的一个File类
File类只进行对文件表明的操作,如果涉及对文件的读写需要涉及流
2.File类的路径概述
绝对路径:写出绝对路径的文件
相对路径:main方法写出相对于当前工程下的相对路径。test方法写出相对于当前工程下的module的路径
window分隔符:\(转义字符相同,故绝对路径时需要添加\)
linux分隔符/
3.File类的方法
createNewFile(新建文件)
delete(删除文件)
*/
②流类简述
/*
1.流的介绍
输入流:硬盘到内存。输出流:内存到硬盘。
2.流的多种类
抽象流:InputStream,Reader,(用于其他类实现方法)
节点流:FileInputStream,FileReader,(用于实际上传输数据的流)
缓冲流:BufferedInputStram,BufferedReader,(处理流,能够提供缓冲加速节点流的传输)
转换流:InputStreamReader,OutputStramWriter(处理流,能够转换字节流和字符流)
字节流:能够传输字节的流(图片,视频等)
字符流:能够传输字符的流(txt文件等)
3.字符流的使用
实例化File对象
实例化节点流对象
节点流对象进行相应的操作
节点流对象资源的关闭
4.缓冲流的使用
实例化File对象
实例化FileReader和FileWriter对象
实例化BufferedReader和BufferedWriter对象
写入和写出(char数组要不足够大,要不设置len来规定写出多少)
资源关闭
5.转换流的使用
实例化File对象
实例化FileInputStream和FileOutputStream对象
实例化InputStreamReader和OutputStreamWriter对象
写入和写出(转换格式为gbk)
资源关闭
6.Java序列化机制简介:
序列化过程:java对象作为二进制存储在磁盘上
反序列化过程:将java对象还原为内存中的java对象
ObjectOutputStream
ObjectInputStream
7.序列化的使用
实例化对象和流对象
入操作
关闭资源
*/
③字符集简介
/*
1.字符集的理解:
Unicode只是定义了编号,而不是编码集,具体实现Unicode的编码集是utf-8
utf—8:是码的集合
ASCII:是美国信息交换码
GBK:是中国汉字编码
*/
二.代码
1.file类
/*
1.File类的概述
每一个对象都对应的一个File类
File类只进行对文件表明的操作,如果涉及对文件的读写需要涉及流
2.File类的路径概述
绝对路径:写出绝对路径的文件
相对路径:main方法写出相对于当前工程下的相对路径。test方法写出相对于当前工程下的module的路径
window分隔符:\(转义字符相同,故绝对路径时需要添加\)
linux分隔符/
3.File类的方法
createNewFile(新建文件)
delete(删除文件)
*/
public class Test1 {
//测试相对路径
//在项目\下生成了一个1
public static void main(String[] args){
File tx = new File("1");
tx.mkdir();
}
//在项目\module下生成了一个my
@Test
public void test0(){
File tx1 = new File("my");
tx1.mkdir();
}
//File类的方法测试
@Test
public void testMethod() throws Exception{
File a = new File("my");
a.createNewFile();
a.delete();
}
}
2.流类
/*
1.流的介绍
输入流:硬盘到内存。输出流:内存到硬盘。
2.流的多种类
抽象流:InputStream,,Reader,,(用于其他类实现方法)
节点流:FileInputStream,,FileReader,,(用于实际上传输数据的流)
缓冲流:BufferedInputStram,,BufferedReader,,(处理流,能够提供缓冲加速节点流的传输)
转换流:InputStreamReader,OutputStramWriter(处理流,能够转换字节流和字符流)
字节流:能够传输字节的流(图片,视频等)
字符流:能够传输字符的流(txt文件等)
3.字符流的使用
实例化File对象
实例化节点流对象
节点流对象进行相应的操作
节点流对象资源的关闭
4.缓冲流的使用
实例化File对象
实例化FileReader和FileWriter对象
实例化BufferedReader和BufferedWriter对象
写入和写出(char数组要不足够大,要不设置len来规定写出多少)
资源关闭
5.转换流的使用
实例化File对象
实例化FileInputStream和FileOutputStream对象
实例化InputStreamReader和OutputStreamWriter对象
写入和写出(转换格式为gbk)
资源关闭
6.Java序列化机制简介:
序列化过程:java对象作为二进制存储在磁盘上
反序列化过程:将java对象还原为内存中的java对象
ObjectOutputStream
ObjectInputStream
7.序列化例子
实例化对象和流对象
入操作
关闭资源
*/
public class Test2 {
//字符流的例子
@Test
public void test0() throws Exception{
File file = new File("test.txt");
FileReader fr = new FileReader(file);
int data = fr.read();//read方法返回int型,到文件末尾返回-1
while(data!=-1){
System.out.print((char)data);
data = fr.read();
}
FileWriter fw = new FileWriter(file);
fw.write("\n你好世界");//write方法没有文件创造文件,有文件默认覆盖文件,第一个参数file,第二个参数为默认false覆盖文件,填true即为追加
while(data!=-1){
System.out.print((char)data);
data = fr.read();
}
fr.close();
fw.close();
}
//缓冲流的例子
@Test
public void test1() throws Exception{
File file_r = new File("test.txt");
File file_w = new File("test2.txt");
FileReader fr = new FileReader(file_r);
FileWriter fw = new FileWriter(file_w);
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
//此处逻辑
//char数组设置的够大,直接赋值全部
//char数组设置的不够大,需要更换逻辑,因为一次写入3个字节,汉字可能正好对应两个,则第二个汉字出现问题
//如原文本你好世界,结果文本为你好世界好世,即第二次输出为界好世
//因为数组在复制的过程中,在最后一次如果只写入前几个,那么上一次写入的剩余还会保存在后几个
//故需要设置len来固定每次写入的大小
char[] ch = new char[3];
int len;//加入len后解决问题
while((len =br.read(ch))!=-1){
bw.write(ch,0,len);
}
bw.close();
br.close();
}
//转换流的例子(变换字符集)
@Test
public void test2() throws Exception{
File file_r = new File("test.txt");
File file_w = new File("test2-gbk.txt");
FileInputStream fis = new FileInputStream(file_r);
FileOutputStream fos = new FileOutputStream(file_w);
InputStreamReader isr = new InputStreamReader(fis);//转换字节到字符(输入字节流) (输入)
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");//转换字符到字节(输入字节流)(输出)
char[] ch = new char[5];
int len;
while((len = isr.read(ch))!=-1){
osw.write(ch,0,len);
}
osw.close();
isr.close();
}
//序列化过程
@Test
public void test() throws Exception{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("object.dat")));
oos.writeObject(new String("我喜欢你"));
oos.flush();
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("object.dat")));
Object obj = ois.readObject();
System.out.println((String)obj);
ois.close();
}