Java文件字节输入流(FileInputSream)文件字节输出流(OutputStream),字符输入输出流(FileReader/FileWriter)

FileInputSream:读文件的过程

文件写入的过程

1.创建一个File类对象

2.创建一个FileInputStream对象

3.调用FileInputStream的方法,实现file文件的读取

4.关闭相应的流

	public void testFileInputStream3(){
		//将流读出到byte数组中
		FileInputStream fis=null;
		File file=null;
		try {
			file =new File("bast.txt");
			fis=new FileInputStream(file);
			byte[] b=new byte[20]; //读取到的数据要写入的数组
			int len; //记录每次读入到数组中的字节长度
			while((len=fis.read(b))!=-1){
//				for(int i = 0;i<len;i++)
//					System.out.print(i +":"+ (char) b[i]);
				String str = new String(b,0,len);
				System.out.println(len);
				System.out.print(str);
			}	
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(fis!=null)
				try {
					fis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}


FileOutputSream:写文件的过程

1.创建一个File对象

2.创建一个FileOutputStream输出流对象

3.将File对象作为FileOutputStream的构造器参数

4.写入文件:若输出的文件不存在,则创建一个文件;每次写入时,都覆盖原先的文件

5.关闭输出流

	public void testFileOutputStream(){
		//1.创建一个File对象
		File file=new File("hello.txt");
		//2.创建一个FileOutputStream输出流对象
		FileOutputStream fos=null;
		try {
			//3.将File对象作为FileOutputStream的构造器参数
			fos=new FileOutputStream(file);
			//4.写入文件:若输出的文件不存在,则创建一个文件;每次写入时,都覆盖原先的文件
			fos.write(new String("I love you , stillman!").getBytes());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				//5.关闭输出流
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

对文件进行复制

	public void testFileInputOutput(){
		long start=System.currentTimeMillis();
		FileInputStream fis=null;
		FileOutputStream fos=null;		
		File f1=new File("hello.txt");
		File f2=new File("hello-tmp.txt");
//		File f1=new File("D:/技术视频/Java/第10章:IO(day15-day16)/day15/流的分类结构图.JPG");
//		File f2=new File("D:/技术视频/Java/第10章:IO(day15-day16)/day15/流的分类结构图-copy.JPG");
		try {
			fis=new FileInputStream(f1);
			fos=new FileOutputStream(f2);
			
			int len=0;
			byte[] bs=new byte[10];
			while((len=fis.read(bs))!=-1){
				fos.write(bs, 0, len); //错误写法:fos.write(bs, 0, bs.len());或者fos.write(bs);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fis!=null)
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			if(fos!=null)
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		long end=System.currentTimeMillis();
		System.out.println("执行时间:" + (end-start));
	}

使用FileReader,FileWriter只能用于处理文本文件,因为FileReader,FileWriter是以字符的形式去读的,对于视频文件、音频文件、图像文件,只能使用字节流。

使用FileReader

	@Test
	public void testFileReader(){
		FileReader fr=null;
		File file=null;
		
		file=new File("bast.txt");
		try {
			fr=new FileReader(file);
			int len=0;
			char[] c=new char[24];
			while((len=fr.read(c))!=-1){
				String str=new String(c,0,len);
				System.out.print(str);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}	
		if(fr!=null)
		try {
			fr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


复制文件

	@Test
	public void testFileCopy(){
		FileReader fr=null;
		FileWriter fo=null;
		File file=null;
		File file_cp=null;
		try {
			file=new File("bast.txt");
			file_cp=new File("bast_cp.txt");
			fr=new FileReader(file);
			fo=new FileWriter(file_cp);
			int len=0;
			char[] c=new char[24];
			while((len=fr.read(c))!=-1){
				fo.write(c,0,len);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		if(fr!=null)
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		if(fo!=null)
			try {
				fo.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
	}


使用字节输入流、字节输出流将输入的字节流解码成字符流,读入程序;将程序中的字符流编码成字节流,输出

	@Test
	public void testInputOutStreamReader(){
		long start=System.currentTimeMillis();
		BufferedWriter bw = null;
		BufferedReader br = null;
		try {
			File f1=new File("hello.txt");
			FileInputStream fis=new FileInputStream(f1);
			InputStreamReader isr=new InputStreamReader(fis,"GBK");
			br=new BufferedReader(isr);
			
			File f2=new File("hello-tmp2.txt");
			FileOutputStream fos=new FileOutputStream(f2);			
			OutputStreamWriter osw=new OutputStreamWriter(fos, "unicode");
			bw=new BufferedWriter(osw);
			String str;
			while((str=br.readLine())!=null){
				System.out.println(str);
				bw.write(str);
				bw.newLine();
				bw.flush();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(br!=null)
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			if(bw!=null)
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		long end=System.currentTimeMillis();
		System.out.println("执行时间:" + (end-start));
	}

使用标准输入输出流测试BufferredReader

	@Test
	public void testSTDStream(){
		long start=System.currentTimeMillis();
		BufferedReader br = null;
		try {
			InputStream is=System.in;
			InputStreamReader isr=new InputStreamReader(is);
			br = new BufferedReader(isr);
			String str = null;
			while(true){
				System.out.println("请输入:");
				str=br.readLine();
				if(str.equalsIgnoreCase("e") || str.equalsIgnoreCase("exit")){
					break;
				}
				String str1=str.toUpperCase();
				System.out.println(str1);
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		}finally{
			try {
				if(br!=null)
					br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}	
		}
		long end=System.currentTimeMillis();
		System.out.println("执行时间:" + (end-start));
	}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值