JAVA SE—— 文件IO流 (经常忘记的知识点总结)

满堂花醉三千客,一剑霜寒十四洲。这篇文章主要讲述JAVA SE—— 文件IO流 (经常忘记的知识点总结)相关的知识,希望能为你提供帮助。
@TOC

JAVA SE—— 文件IO流 (经常忘记的知识点总结)

文章图片

1、文件APIQ:
A:
Q:
A:
private static boolean deleteDir(File dir) if (dir.isDirectory()) String[] children = dir.list(); //递归删除目录中的子目录下 for (int i=0; i< children.length; i++) boolean success = deleteDir(new File(dir, children[i])); if (!success) return false; // 目录此时为空,可以删除 return dir.delete();

Q:
A:
  1. File类的exists方法:file.exist(string)
File testFile = new File(testFilePath); if(!testFile .exists()) ...

  1. File类的静态exist方法, File.exist(Path path)
Path filePath = Paths.get(testFilePath); if (Files.exists(filePath) ...

注意静态方法和非静态方法的区别
2、字节输入流InputStream说一下以下这些特点对应哪些InputStream类
  • 字节数组char[] 作为输入源的InputStream类是————ByteArrayInputStream
  • 用文件作为输入源的InputStream类是?————FileInputStream
  • 用字符串作为输入源的是?————StringBufferInputStream
  • 用于多线程之间管道通信的输入源是————PipeInputStream
Q:
A:
InputStream inputStream = new FilterInputStream(InputStream)

以下这些特点分别对应哪些FilterInputStream?
3、字节输出流OutputStreamOutputStream包含
ByteArrayOutputStream输出到缓冲区
FileOutputStream写到文件
PipedOutputStream写入管道
FilterOutputStream
而FilterOutputStream 包含
  • DataOutputStream(可以out.writexxx各种类型的数据,writeDouble, writeUTF,reader也一样,可以读想要的数据类型)、
  • PringtStream (输出到文件用这个, 该类.println(str)即可写入文件)
  • BufferOutputString
FileOutputStream相关
Q:
A:
JAVA SE—— 文件IO流 (经常忘记的知识点总结)

文章图片

默认是false,指的是覆盖整个文本。
如果设置成true,会在要写入的文件后面追加本次写入的内容。
Q:
A:
  • flush把缓冲区里的数据写入文件,并刷新缓冲区
JAVA SE—— 文件IO流 (经常忘记的知识点总结)

文章图片

  • close关闭此输出流并释放与此相关联的任何系统资源, 会调用flush,除了flushBuffer,还会调用父类的flush。
  • 不会丢数据,因为上面这条原因。
  • 多次调用不会报错。
    JAVA SE—— 文件IO流 (经常忘记的知识点总结)

    文章图片

4、Reader和WriterQ:
A:
  • InputStream是表示 字节输入流 的所有类的超类
    Reader是用于读取 字符流 的抽象类
    InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。
    即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
  • Reader/Writer提供兼容Unicode、面向字符的IO功能,为了国际化
  • 用reader读取标准输入:
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  • 用Writer进行标准输出:
    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
设置编码:
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8"); BufferedReader read = new BufferedReader(isr);

5、序列化问题Q:
A:
  • 方法一:可使用transient关键字处理那个敏感成员
  • 方法二:可以通过覆盖Serializable接口的writeObject和readObject来实现序列化,但是方法签名必须是private void writeObject(ObjetOutputStream stream) throwIOException;
  • 方法三: 实现Externalizable接口,可自定义实现writeExternal以及readExternal方法
Q:
A:
Externalizable更快。
Q:
A:
采用Externalizable无需产生序列化ID(serialVersionUID)~而Serializable接口则需要
序列化集合练习案例分析
案例代码实现
public class SerTest public static void main(String[] args) throws Exception // 创建 学生对象 Student student = new Student("老王", "laow"); Student student2 = new Student("老张", "laoz"); Student student3 = new Student("老李", "laol"); ArrayList< Student> arrayList = new ArrayList< > (); arrayList.add(student); arrayList.add(student2); arrayList.add(student3); // 序列化操作 // serializ(arrayList); // 反序列化 ObjectInputStream ois= new ObjectInputStream(new FileInputStream("list.txt")); // 读取对象,强转为ArrayList类型 ArrayList< Student> list= (ArrayList< Student> )ois.readObject(); for (int i = 0; i < list.size(); i++ ) Student s = list.get(i); System.out.println(s.getName()+"--"+ s.getPwd()); private static void serializ(ArrayList< Student> arrayList) throws Exception // 创建 序列化流 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("list.txt")); // 写出对象 oos.writeObject(arrayList); // 释放资源 oos.close();

6、打印流 1.何谓打印流2.打印流分类:3.打印流特点:这个时候有同学就要问了,哪些流可以直接操作文件呢?答案很简单,如果该流的构造方法能够同时接收File和String类型的参数,一般都是可以直接操作文件的!
PrintStream是OutputStream的子类,PrintWriter是Writer的子类,两者处于对等的位置上,所以它们的API是非常相似的。二者区别无非一个是字节打印流,一个是字符打印流。
4.字节输出打印流PrintStream复制文本文件
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.PrintStream; public class PrintStreamDemo public static void main(String[] args) throws IOException BufferedReader br=new BufferedReader(new FileReader("copy.txt")); PrintStream ps=new PrintStream("printcopy.txt"); String line; while((line=br.readLine())!=null) ps.println(line); br.close(); ps.close();

5.字符输出打印流PrintWriter复制文本文件
  • import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; /** * 使用打印流复制文本文件 */ public class PrintWriterDemo public static void main(String[] args) throws IOException BufferedReader br=new BufferedReader(new FileReader("aa.txt")); PrintWriter pw=new PrintWriter("printcopyaa.txt"); String line; while((line=br.readLine())!=null) pw.println(line); br.close(); pw.close();

7、Properties概述java.util.Properties 继承于Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties 方法就是返回一个Properties对象。
Properties类 构造方法
基本的存储方法
public class ProDemo public static void main(String[] args) throws FileNotFoundException // 创建属性集对象 Properties properties = new Properties(); // 添加键值对元素 properties.setProperty("filename", "a.txt"); properties.setProperty("length", "209385038"); properties.setProperty("location", "D:\\\\a.txt"); // 打印属性集对象 System.out.println(properties); // 通过键,获取属性值 System.out.println(properties.getProperty("filename")); System.out.println(properties.getProperty("length")); System.out.println(properties.getProperty("location")); // 遍历属性集,获取所有键的集合 Set< String> strings = properties.stringPropertyNames(); // 打印键值对 for (String key : strings ) System.out.println(key+" -- "+properties.getProperty(key));

输出结果:
filename=a.txt, length=209385038, location=D:\\a.txt a.txt 209385038 D:\\a.txt filename -- a.txt length -- 209385038 location -- D:\\a.txt

与流相关的方法
【JAVA SE—— 文件IO流 (经常忘记的知识点总结)】参数中使用了字节输入流,通过流对象,可以关联到某文件上,这样就能够加载文本中的数据了。现在文本数据格式如下:
filename=Properties.txt length=123 location=C:\\Properties.txt

加载代码演示:
public class ProDemo public static void main(String[] args) throws FileNotFoundException // 创建属性集对象 Properties pro = new Properties(); // 加载文本中信息到属性集 pro.load(new FileInputStream("Properties.txt")); // 遍历集合并打印 Set< String> strings = pro.stringPropertyNames(); for (String key : strings ) System.out.println(key+" -- "+pro.getProperty(key));

输出结果:
filename -- Properties.txt length -- 123 location -- C:\\Properties.txt


    推荐阅读