Java IO流总结

问答总结:

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(){

			@Override
			public 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流部分的内容都是零碎的点,总结起来感觉不知道从哪开始,还需要不断深化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值