java io流
2016-06-02 13:46
295 查看
字节流:可以读写所用类型的文件
字符流:只能读写纯文本文件
所有缓冲中的数据都必须加flush();强制读出 否则会缺少或增多
输入流读取文件
FileInputStream文件输入流
FileOutputStream文件输出流
利用FileInputStream,FileOutputStream 拷贝文件
带缓冲的输入输出流BufferedInputStream ,BufferedOutputStream
字符输入输出流
InputStreamReader 将字节流转成字符流
利用InputStreamReader和OutputStreamWriter 拷贝文件
带有缓冲的字符流 拷贝文件
FileReader BufferedReader ,FileWriter BufferedWriter
字符流:只能读写纯文本文件
所有缓冲中的数据都必须加flush();强制读出 否则会缺少或增多
输入流读取文件
FileInputStream文件输入流
try { FileInputStream fis = new FileInputStream("text.txt"); byte input[] =new byte[20];//创建字节数组指定长度 fis.read(input); String inputString=new String(input); System.out.println(inputString); fis.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
FileOutputStream文件输出流
try { FileOutputStream fos =new FileOutputStream("textw.txt"); String outString ="write 123456写出数据"; // byte b=new Byte(outString); byte[] b=outString.getBytes("UTF-8"); fos.write(b); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //参数为相对路径 catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
利用FileInputStream,FileOutputStream 拷贝文件
//将文件"ani.gif"拷贝到"ani_new.gif" try { FileInputStream fis = new FileInputStream("ani.gif"); FileOutputStream fos = new FileOutputStream("ani_new.gif"); byte[] input = new byte[50]; while (fis.read(input) != -1) {//把文件读到字节数组中 fos.write(input);//把字节数组写到“aniw.gif” 文件中 } fis.close(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
带缓冲的输入输出流BufferedInputStream ,BufferedOutputStream
//将文件movie.mp4拷贝到movie_new.mp4 try { FileInputStream fis = new FileInputStream("movie.mp4"); BufferedInputStream bis = new BufferedInputStream(fis,10000);// 将输入流包装成缓冲字节流 可以加快读写速度 ,第二个参数是指定缓区的大小 但是要比下面字节数组大 缓冲区的大小设置合适设置可以加快数据读写 FileOutputStream fos=new FileOutputStream("movie_new.mp4"); BufferedOutputStream bos=new BufferedOutputStream(fos,10000); byte[] input = new byte[100];//把字节数组改大 那么读写次数少了 也就是速度变快了 int count=0; while ( bis.read(input) !=-1) { bos.write(input); count++; } bis.close();//先打开的要后关闭 ,后打开的要先关闭 fis.close(); bos.close(); fos.close(); System.out.println("读取了:"+count+"次"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
字符输入输出流
InputStreamReader 将字节流转成字符流
try { FileInputStream fis=new FileInputStream("java.txt"); InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流 char input[]=new char[100];//字符数组 int L=0; //这个读取出来的数据可能更源文件不一样 ,读出的java在最后的时候可能会多出几个字,也可能会少几个字,因为读的时候不是刚好到100个字节 /*while(isr.read(input) !=-1){ System.out.println(input); }*/ //这个就可以完整读出来 while((L=isr.read(input)) !=-1){ System.out.println(new String(input, 0, L)); } isr.close(); fis.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
利用InputStreamReader和OutputStreamWriter 拷贝文件
//将文件java.txt拷贝到java_new.txt 中 try { FileInputStream fis=new FileInputStream("java.txt"); FileOutputStream fos=new FileOutputStream("java_new.txt"); InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流 OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8"); char input[]=new char[100];//字符数组 int L=0; //这个就可以完整读出来 while((L=isr.read(input)) !=-1){ //System.out.println(new String(input, 0, L)); osw.write(input, 0, L); } isr.close(); fis.close(); osw.close(); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
带有缓冲的字符流 拷贝文件
//将文件"java.txt" 拷贝到"java_new.txt" try { FileInputStream fis=new FileInputStream("java.txt"); FileOutputStream fos=new FileOutputStream("java_new.txt"); InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流 OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8"); BufferedReader br=new BufferedReader(isr);//带有缓冲的输入流 // BufferedWriter bw=new BufferedWriter(osw);//带有缓冲的输出流 PrintWriter pw=new PrintWriter(osw,true);//字符打印输出流 第二个参数跟调用flush作用是一样的 String input; //这个就可以完整读出来 while((input=br.readLine())!=null){ // bw.write(input);//所读取的数据会显示在一行中 pw.println(input);//每读取一行就会自动换行 } // bw.flush(); bw.close(); pw.flush();// 缓冲的数据有时候是不会被读取 flush()将缓冲的数据强制输出 pw.close(); isr.close(); fis.close(); osw.close(); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
FileReader BufferedReader ,FileWriter BufferedWriter
//将文件"java.txt" 拷贝到"java_new.txt" try { FileReader fr = new FileReader("java.txt"); BufferedReader br=new BufferedReader(fr); FileWriter fw=new FileWriter("java_new.txt"); BufferedWriter bw=new BufferedWriter(fw); String line; while ((line=br.readLine())!=null) { bw.write(line+"\n"); } bw.flush();//所有带有缓冲的流都要强制输出 bw.close(); fw.close(); br.close(); fr.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
相关文章推荐
- Spring Boot笔记
- 史上最全最强SpringMVC详细示例实战教程
- java dom4j解析XML读取数据源配置的代码实例
- JDK、J2EE、J2SE、J2ME的区别
- 如何学好java,给你教程
- RxJava源码浅析
- Implementing High Performance Parsers in Java
- 抽象类和接口的区别——从java的设计意图说起
- 深入理解Java的接口和抽象类
- 一致性hash算法与java实现
- Java常用排序算法之希尔排序
- BUG:eclipse中添加V7包ERROR: In <declare-styleable> MenuView, unable to find attribute android:pre
- Spring容器中Bean的作用域
- Java Concurrency - 浅析 CyclicBarrier 的用法
- 设置STS、ECLIPSE、myeclipse打开java源码乱码问题
- 用java做个日历,如果是这一天,就标上*号
- Eclipse 下 查询和复制类路径的快捷方法
- Java中如何遍历Map对象的4种方法
- java遍历文件夹里面的所有文件
- J2ee项目从0搭建(二):Maven下载、安装、eclipse+maven配置