10.1 File:
File概述,文件和目录路径名的抽象表示
构造方法:
File类创建功能:
同一目录下不能创建两个名字相同的目录和文件
File类判断和获取功能:
File类删除功能:
递归:
递归是指方法定义中调用方法本身的现象
递归解决问题的思路:把一个复杂问题层层转换为与原问题相似的规模较小的问题求解
递归策略只需少量的程序就可描述解题过程所需的多次重复计算
递归解决问题,要有出口,递归的规则是转换为规模较小的相似问题
10.2 字节流:
IO流概述:
IO,输入/输出;流,一种抽象概念,对数据传输的总称
IO流是用来处理设备间数据传输问题的,常见的应用有文件的复制、上传、下载
硬盘到内存:读数据
内存到硬盘:写数据
IO流分类:
按数据流向:
输入流:读数据
输出流:写数据
按数据类型分类:
字节流:字节输入/输出流(用记事本打开不能读懂)(万能,不知道就用字节流)
字符流:字符输入/输出流(用记事本打开能够读懂)
InputStream,字节输入流的超类
OutputStream,字节输出流的超类(FileOutputStream)
所有和IO相关的操作最后都要释放资源(fos.close())
字节流写数据方法:
"Hanfeng".getBytes(),获得字符串的字节数组形式
字节流写数据换行:在字节数组末尾加上/n
字节流写数据追加信息:创建文件字节输出流时有一个参数append,设置为true即可完成追加操作
字节流写数据异常处理
FileOutputStream fos = null;
try{
fos = new FileOutputStream("D://Java//file.txt");
fos.write("hello".getBytes());
}catch(IOException e){
e.printStackTrace();
}finally{
if(fos != null){
try{
fos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
字节流读数据:
FileInputStream()
FileInputStream fis = new FileInputStream("E://data//file.txt");
byte[] bys = new byte[1024];
int len;
while((len=fis.read(bys)) != -1){
System.out.println(new String(bys, 0, len));
}
字节流写数据:
FileOutputStream()
FileOutputStream fos = new FileOutputStream("E://data//newfile.txt");
FileInputStream fis = new FileInputStream("E://data//file.txt")
byte[] bys = new byte[1024];
while((len=fis(bys)) != -1){
fos.write(bys, 0, len);
}
字节缓冲流:
BufferOutputStream:实现缓冲输出流,(大小为8192)
BufferInputStream:创建一个内部缓冲区数组,提高读写效率
10.3 字符流:
汉字存储编码:GBK编码,占用两个字节;UTF-8编码,占用三个字节
使用字节流的方式读取汉字会输出乱码表示,所以引入了字符流的方式
在使用字节流进行汉字读取和写入时,无论采用GBK还是UTF-8方式读取的字节第一位都是负数,从而能够判断出读取到的是一个汉字
字符流 = 字节流+编码表
编码表:
ASCII
GBXXX(GB2312、GBK、GB18030)
Unicode(UTF-8、UTF-16、UTF-32)
编码方式:byte[] getBytes(),使用平台默认字符集将该String编码为一系列字节,结果存于字节数组
解码方式:String(),使用平台默认字符集解码字节数组构造新的String
字符流写数据方法:
(osw.flush()刷新流方法)
FileWriter,写数据(便携版本的读写操作)
FileReader,读数据
字符缓冲流:
BufferedWriter:
BufferedReader:
字符缓冲流特有功能:
void newLine():写一行行分隔符
public String readLine():读一行文字
IO流小结:
字节流:
- 字节输入流:
- FileInputStream
- BufferedInputStream
- 字节输出流:
- FileOutputStream
- BufferedOutputStream
字符流:
- 字符输入流:
- InputStreamReader:-> FileReader
- BufferedReader:br.readLine()
- 字符输出流:
- OutputStreamWriter: -> FileWriter
- BufferedWriter:bw.newLine()
生成随机数:Random r = new Random(int i);int index = r.nextInt();
复制文件异常处理:
10.4:特殊操作流:
标准输入流:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
// 上面的代码过于麻烦,所以官方给了接口
Scanner sc = new Scanner(System.in);
标准输出流:
PrintStream ps = System.out;
ps.println("Java");
// 上面等价于下面
System.out.println("Java");
打印流:
字节打印流:PrintStream
字节打印流写数据,有两种方法。1)继承父类的write方法,2)自己特有的print和println方法,调用自己特有的方法进行数据写入时,不会发生转码,写入什么显示的就是什么东西
字符打印流:PrintWriter
PrintWriter(String fileName)
PrintWriter(FileWriter fileName,boolean Flush)
对象序列化流:
对象序列化:将对象保存到磁盘中,或在网络中传输对象
ObjectOutputStream:一个对象想要被序列化,需要实现Serializable接口(oos.writeObject())
ObjectInputStream:反序列化使用ObjectOutputStream编写的对象(ois.readObject())
对象序列化流中的问题
修改对象所属的类文件,读取数据发生错误
抛出InvalidClassException异常
解决上述异常
给对象所属的类添加serialVersionUID
一个对象中的某个成员变量不想被序列化,如何实现
给成员变量加transient关键字修饰
Properties:
概述:Properties是一个Map体系的集合,Properties可以保存到流中或从流中加载
Properties特有方法:
Properties与IO流结合:
原文:https://www.cnblogs.com/zhongshu/p/15239597.html