摘要:Java IO 体系看起来类不少,感受很复杂,但实际上是 IO 涉及的因素太多了。在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,因此会给人一种很乱的感受,而且还有设计模式的使用,更加难以使用这些 IO 类,因此特意对 Java 的 IO 作一个总结。
本文分享自华为云社区《老是记不住java的IO流用法?用N个问题教你掌握java IO流》,原文做者:breakDraw 。java
Java IO 体系看起来类不少,感受很复杂,但实际上是 IO 涉及的因素太多了。在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,因此会给人一种很乱的感受,而且还有设计模式的使用,更加难以使用这些 IO 类,因此特意对 Java 的 IO 作一个总结。segmentfault
Q: File类能够用来作目录操做吗?设计模式
A:能够。数组
File对象自己能够是目录。调用file.mkdirs()便可建立目录。多线程
Q:直接调用file.delete()能够删除目录吗?函数
A:若是是文件或者空目录,能够直接删除。编码
但若是目录中有文件或者子目录,则必须递归删除。spa
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: 有哪些方法判断给定路径下文件是否存在?.net
A:线程
1.File类的exists方法: file.exist(string)
File testFile = new File(testFilePath); if(!testFile .exists()) {...}
2.File类的静态exist方法, File.exist(Path path)
Path filePath = Paths.get(testFilePath); if (Files.exists(filePath) {...}
注意静态方法和非静态方法的区别
说一下如下这些特色对应哪些Input Stream类
Q: FilterInputStream是什么?
A: 用于装饰上面这些输入流的,能够叠加,每装饰一层就至关于增长了1个功能。
InputStream inputStream = new FilterInputStream(InputStream)
如下这些特色分别对应哪些FilterInputStream?
OutputStream包含
ByteArrayOutputStream 输出到缓冲区
FileOutputStream 写到文件
PipedOutputStream 写入管道
FilterOutputStream
而FilterOutputStream 包含
FileOutputStream相关
Q:new FileOutputStream(name, true),这个构造里的true参数是作什么用的?
A:是否支持在文件末追加的意思。
默认是false,指的是覆盖整个文本。
若是设置成true,会在要写入的文件后面追加本次写入的内容。
Q:
BufferOutputStream相关概念(实际上是考缓冲区是否须要刷新之类的问题)
A:
Q: Reader/Writer和InputStream/OutputStream的区别?
A:
设置编码:
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8"); BufferedReader read = new BufferedReader(isr);
Q: 对某对象进行序列化时, 如何让里面某个敏感成员不被序列化?
A:
Q: Externalizable和Serializable哪一个快?
A: Externalizable更快。
Q: Externalizable须要产生序列化ID吗?
A: 采用Externalizable无需产生序列化ID(serialVersionUID)~而Serializable接口则须要
https://blog.csdn.net/qq_2622...
https://blog.csdn.net/weixin_...