Java IO流总结

来源:互联网 发布:app流程图制作软件 编辑:程序博客网 时间:2024/05/21 22:27

问答总结:

1.判断使用字节流还是字符流?

除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。

2.为什么要close()

让对象变成垃圾,系统释放资源

3.字节输出流如何实现数据的换行?

fos.write("\r\n".getBytes());

4.写入数据时如果没有文件,系统会自动创建,但是读取数据没有文件,会报错。

5.如何实现数据的追加写入(将字节/字符写入文件末尾处,而不是写入文件开始处)?

FileOutputStream fos=new FileOutputStream("fos.txt",true);创建对象是加true

6.缓冲区流为什么不传递一个具体的文件或者文件路径,而是一个流对象呢?

字节缓冲区流仅仅提供缓冲区,为高效而设计的,真正的读写操作还是的靠基本的流对象实现。

7. 字符流close 和flush的区别

A:close()关闭流对象,但是先刷新一次缓冲区,关闭之后,流对象不可以继续在使用了。

B:flush()仅仅刷新缓冲区,刷新之后流对象还可以继续使用。

8.字符流复制文本文件5种方式的效率:BufferedReader一次读取一个字符数组>FIleReader一次读取一个字符数组>BufferedReader一次读取一个字符>BufferedReader的readLine()和newLIne()方法结合>FileReader一次读取一个字符


递归:程序/方法调用其本身的现象叫递归,在IO流中递归的用法比如在一个文件夹中有很多文件和文件夹,如果要找出所有的文件可以选择用循环的方法,但是代码的复杂度就会提高很多,因此递归是更好的方法。

题目:复制指定目录下(E:\\File)的指定后缀名的文件(.java)并修改名称(.jad)到其他文件夹下(E:\\MyFile)

public class CopyFolderDemo {public static void main(String[] args) throws IOException {//定义数据源File srcFolder=new File("E:\\File");//定义目的地File destFolder=new File("E:\\MyFile");//判断目的地文件夹是否存在,否就创建。这里用到了File类的创建文件和文件夹的功能。除此File类还包含有判断和获取功能if(!destFolder.exists()){destFolder.mkdir();}/*区别:仅仅需要名称用list,需要获取文件,使用文件File的功能用listFiles *Public String[] list();获取指定目录下所有文件或者文件夹的名称数组 *Public File[] listFiles();获取指定目录下的所有文件或者文件夹的file文件数组  *其中如果是空的构造方法,则表示接受所有路径名。但是通过匿名内部类实现FilenameFilter接口,调用accept方法测试指定 *文件是否应该包含在某一文件列表中,这个叫做文件名过滤器 *Public String[] list(FilenameFilter filter); *Public File[] listFiles(FilenameFilter filter); *///获取数据源目录下的file文件数组File[] fileArray=srcFolder.listFiles(new FilenameFilter(){@Overridepublic boolean accept(File dir, String name) {//返回所有以.java结尾的文件return new File(dir,name).isFile()&&name.endsWith(".java");}});//增强for循环遍历该数组得到每一个对象for(File file:fileArray){//遍历得到的是文件的绝对路径,File类的getName()方法得到文件名String name=file.getName();//在目的地文件夹下复制同名文件File newFille=new File(destFolder,name);copyFile(file,newFille);}//在目的地目录下改名File[] destFileArray=destFolder.listFiles();for(File destFile:destFileArray){String name=destFile.getName();String newName=name.replaceAll(".java", ".jad");File newFile=new File(destFolder,newName);destFolder.renameTo(newFile);//File类的重命名功能}}//字节缓冲流一次读取一个字节数组复制文件private static void copyFile(File file, File newFile) throws IOException {BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(newFile));byte[] bys=new byte[1024];int len=0;while((len=bis.read(bys))!=-1){//每读取1024个字节就写入,读的长度和写的长度相等bos.write(bys,0,len);}bos.close();bis.close();}}







总结:IO流部分的内容都是零碎的点,总结起来感觉不知道从哪开始,还需要不断深化。