Java中I/O的分析
Java中I/O的原理:
在java程序中,对于数据的输入/输出操作以”流“的方式进行的。
流是内存中一组有序数据序列
Java将数据从源读入到内存当中,形成了流,然后这些流可以写到目的地。
Java中流按功能分为:节点流(原始流)和处理流(包裹流)
处理流是在节点流的基础上提供了更加强大的读写功能
Java中流按处理数据的不同分为字节流和字符流
字节流:以字节为单位来处理数据的,字节流数据为8位,一般用于对二进制的数据的读写,例如声音,图像等。
字符流:以字符为单位来处理数据的,一般用于读写文本文件的
字节流
- 字节流的基类是抽象类InputStream和OutpuStream。
- InputStream用于输入,OutputStream用于输出。
1 package src; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 public class Test { 10 11 public static void main(String[] args) { 12 //输入外->内,读入数据,输出:内->外,写数据 13 14 //任务:从file1文件读取数据到内存,a.输出到控制台验证,b.输出到file2文件中 15 //1,创建一个给予file1的文件对象,,创建一个给予file2的文件对象, 16 File f1=new File("c:\\file1.txt"); 17 18 File f2=new File("c:\\file2.txt"); 19 //2、 建立一个基于c:\\file1.txt文件的输入通道fis,建立一个基于c:\\file2.txt文件的输 出通道fos, 20 try { 21 FileInputStream fis=new FileInputStream(f1); 22 FileOutputStream fos=new FileOutputStream(f2); 23 //3、把通道fis数据读入到内存,从内存写到file2文件 24 int m; 25 while((m=fis.read())!=-1) 26 { 27 fos.write(m); 28 } 29 30 31 32 } catch (FileNotFoundException e) { 33 // TODO 自动生成的 catch 块 34 e.printStackTrace(); 35 } catch (IOException e) { 36 // TODO 自动生成的 catch 块 37 e.printStackTrace(); 38 } 39 40 41 42 } 43 }
其它方法:
字节流子处理流
字符流
1 package src; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 9 public class Test { 10 11 public static void main(String[] args) { 12 13 File f1=new File("d:\\file1.txt"); 14 15 File f2=new File("d:\\file2.txt"); 16 17 try { 18 FileReader fis=new FileReader(f1); 19 FileWriter fos=new FileWriter(f2); 20 21 int m; 22 while((m=fis.read())!=-1) 23 { 24 //输出到控制台上 25 //System.out.print((char)(m)); 26 //输出到file2.txt文件上 27 fos.write((char)(m)); 28 } 29 30 } catch (FileNotFoundException e) { 31 // TODO 自动生成的 catch 块 32 e.printStackTrace(); 33 } catch (IOException e) { 34 // TODO 自动生成的 catch 块 35 e.printStackTrace(); 36 } 37 } 38 }
字符流之处理流
系统类及流的概念
System类是Java语言中一个功能强大、非常有用的类,它提供了
标准输入/输出及运行时的系统信息。从System类不能创建对象,也
就是说,System类的所有属性和方法都是静态的,引用时要以
System作为前缀。System.in与System.out是System类的两个静态
属性,分别对应系统的标准输入/输出流。
其中,System.in称为标准输入流,用于程序输入,通常读取用户
从键盘输入的信息;System.out称为标准输出流,用于程序输出,
通常向用户显示信息;System.err称为标准错误流,用于向用户显示
出错信息。
1 package src; 2 3 import java.io.IOException; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 9 System.out.println("请输入数据:"); 10 try { 11 int i = System.in.read(); 12 System.out.println("输入的数据为:"+(char)i); 13 } catch (IOException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 } 18 }
1 //读取控制台信息到文件中去,当输入“q”时退出 2 package src; 3 4 import java.io.File; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 public class Test { 10 11 public static void main(String[] args) { 12 13 File f = new File("d:\\file1.txt"); 14 try { 15 FileOutputStream fop = new FileOutputStream(f); 16 while(true){ 17 //创建缓冲数组 18 byte[] b = new byte[1024]; 19 System.out.println("请输入数据:"); 20 //将输入的数据放入缓冲区中,返回输入的字符串 21 int len = System.in.read(b); 22 if(b[0]==\'q\'){ 23 System.out.println("退出"); 24 break; 25 }else{ 26 //将数据从0偏移开始读取len个字符 27 fop.write(b, 0, len); 28 } 29 } 30 } catch (FileNotFoundException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } catch (IOException e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 } 37 38 } 39 }