java i/o流

来源:互联网 发布:火车头采集器数据导出 编辑:程序博客网 时间:2024/04/30 23:41

 


字节型输出

FileOutputStream输出流管理

  1. import java.io.File ;  
  2. import java.io.OutputStream ;  
  3. import java.io.FileOutputStream ;  
  4. public class OutputStreamDemo01{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件   
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象   
  9.         OutputStream out = null ;   // 准备好一个输出的对象  
  10.         out = new FileOutputStream(f, true)  ;    // 通过对象多态性,进行实例化  true表示追加内容或者在字符串前加 \r\n
  11.         // 第3步、进行写操作   
  12.         String str = "Hello World!!!" ;     // 准备一个字符串  
  13.         byte b[] = str.getBytes() ;         // 只能输出byte数组,所以将字符串变为byte数组  
  14.         out.write(b) ;                      // 将内容输出,保存文件  
  15.         // 第4步、关闭输出流   
  16.         out.close() ;                       // 关闭输出流  
  17.     }  
  18. }; 

字节输入流:InputStream

  1. import java.io.File ;  
  2. import java.io.InputStream ;  
  3. import java.io.FileInputStream ;  
  4. public class InputStreamDemo01{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件   
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象   
  9.         InputStream input = null ;  // 准备好一个输入的对象  
  10.         input = new FileInputStream(f)  ;   // 通过对象多态性,进行实例化  
  11.         // 第3步、进行读操作   
  12.         byte b[] = new byte[1024] ;     // 所有的内容都读到此数组之中  
  13.         input.read(b) ;     // 读取内容  
  14.         // 第4步、关闭输出流   
  15.         input.close() ;                     // 关闭输出流  
  16.         System.out.println("内容为:" + new String(b)) ;    // 把byte数组变为字符串输出  
  17.     }  
  18. }; 

红色标注的表明是可以直接读取1024字节

  1. import java.io.File ;  
  2. import java.io.InputStream ;  
  3. import java.io.FileInputStream ;  
  4. public class InputStreamDemo02{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件  
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象  
  9.         InputStream input = null ;  // 准备好一个输入的对象  
  10.         input = new FileInputStream(f)  ;   // 通过对象多态性,进行实例化  
  11.         // 第3步、进行读操作  
  12.         byte b[] = new byte[1024] ;     // 所有的内容都读到此数组之中  
  13.         int len = input.read(b) ;       // 读取内容  
  14.         // 第4步、关闭输出流  
  15.         input.close() ;                     // 关闭输出流\  
  16.         System.out.println("读入数据的长度:" + len) ;  
  17.         System.out.println("内容为:" + new String(b,0,len)) ;  // 把byte数组变为字符串输出  
  18.     }  
  19. }; 

如果要想知道文件大小,直接使用File 类即可

  1. import java.io.File ;  
  2. import java.io.InputStream ;  
  3. import java.io.FileInputStream ;  
  4. public class InputStreamDemo03{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件   
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象   
  9.         InputStream input = null ;  // 准备好一个输入的对象  
  10.         input = new FileInputStream(f)  ;   // 通过对象多态性,进行实例化  
  11.         // 第3步、进行读操作   
  12.         byte b[] = new byte[(int)f.length()] ;      // 数组大小由文件决定  
  13.         int len = input.read(b) ;       // 读取内容  
  14.         // 第4步、关闭输出流   
  15.         input.close() ;                     // 关闭输出流\  
  16.         System.out.println("读入数据的长度:" + len) ;  
  17.         System.out.println("内容为:" + new String(b)) ;    // 把byte数组变为字符串输出  
  18.     }  
  19. };

以上的操作,只适合于知道输入流大小的时候,如果现在不知道大小呢?

  1. import java.io.File ;  
  2. import java.io.InputStream ;  
  3. import java.io.FileInputStream ;  
  4. public class InputStreamDemo05{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件   
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象   
  9.         InputStream input = null ;  // 准备好一个输入的对象  
  10.         input = new FileInputStream(f)  ;   // 通过对象多态性,进行实例化  
  11.         // 第3步、进行读操作   
  12.         byte b[] = new byte[1024] ;     // 数组大小由文件决定  
  13.         int len = 0 ;   
  14.         int temp = 0 ;          // 接收每一个读取进来的数据  
  15.         while((temp=input.read())!=-1){  
  16.             // 表示还有内容,文件没有读完   
  17.             b[len] = (byte)temp ;  
  18.             len++ ;  
  19.         }  
  20.         // 第4步、关闭输出流   
  21.         input.close() ;                     // 关闭输出流\  
  22.         System.out.println("内容为:" + new String(b,0,len)) ;  // 把byte数组变为字符串输出  
  23.     }  
  24. };
字符流的操作比字节流操作好在一点, 就是可以直接输出字符串了。不用再像之前那样进行转换操作了。

  1. import java.io.File ;  
  2. import java.io.Writer ;  
  3. import java.io.FileWriter ;  
  4. public class WriterDemo01{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件   
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象   
  9.         Writer out = null ; // 准备好一个输出的对象  
  10.         out = new FileWriter(f)  ;  // 通过对象多态性,进行实例化  
  11.         // 第3步、进行写操作   
  12.         String str = "Hello World!!!" ;     // 准备一个字符串  
  13.         out.write(str) ;                        // 将内容输出,保存文件  
  14.         // 第4步、关闭输出流   
  15.         out.close() ;                       // 关闭输出流  
  16.     }  
  17. }; 
以字符数组的形式读取出数据。

  1. import java.io.File ;  
  2. import java.io.Reader ;  
  3. import java.io.FileReader ;  
  4. public class ReaderDemo01{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件   
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象   
  9.         Reader input = null ;   // 准备好一个输入的对象  
  10.         input = new FileReader(f)  ;    // 通过对象多态性,进行实例化  
  11.         // 第3步、进行读操作   
  12.         char c[] = new char[1024] ;     // 所有的内容都读到此数组之中  
  13.         int len = input.read(c) ;       // 读取内容  
  14.         // 第4步、关闭输出流   
  15.         input.close() ;                     // 关闭输出流  
  16.         System.out.println("内容为:" + new String(c,0,len)) ;  // 把字符数组变为字符串输出  
  17.     }  
  18. }; 

也可以使用循环的方式,通过文件是否讲到底的形式读取。

  1. import java.io.File ;  
  2. import java.io.Reader ;  
  3. import java.io.FileReader ;  
  4. public class ReaderDemo02{  
  5.     public static void main(String args[]) throws Exception{    // 异常抛出,不处理  
  6.         // 第1步、使用File类找到一个文件   
  7.         File f= new File("d:" + File.separator + "test.txt") ;  // 声明File对象  
  8.         // 第2步、通过子类实例化父类对象   
  9.         Reader input = null ;   // 准备好一个输入的对象  
  10.         input = new FileReader(f)  ;    // 通过对象多态性,进行实例化  
  11.         // 第3步、进行读操作   
  12.         char c[] = new char[1024] ;     // 所有的内容都读到此数组之中  
  13.         int temp = 0 ;  // 接收每一个内容  
  14.         int len = 0 ;       // 读取内容  
  15.         while((temp=input.read())!=-1){  
  16.             // 如果不是-1就表示还有内容,可以继续读取   
  17.             c[len] = (char)temp ;  
  18.             len++ ;  
  19.         }  
  20.         // 第4步、关闭输出流   
  21.         input.close() ;                     // 关闭输出流  
  22.         System.out.println("内容为:" + new String(c,0,len)) ;  // 把字符数组变为字符串输出  
  23.     }  
  24. };

是使用字符流还是使用字节流呢? 肯定使用字节流,因为万一拷贝的是一个图片的。

  1. import java.io.* ;  
  2. public class Copy{  
  3.     public static void main(String args[]){  
  4.         if(args.length!=2){     // 判断是否是两个参数  
  5.             System.out.println("输入的参数不正确。") ;  
  6.             System.out.println("例:java Copy 源文件路径 目标文件路径") ;  
  7.             System.exit(1) ;    // 系统退出  
  8.         }  
  9.         File f1 = new File(args[0]) ;   // 源文件的File对象  
  10.         File f2 = new File(args[1]) ;   // 目标文件的File对象  
  11.         if(!f1.exists()){  
  12.             System.out.println("源文件不存在!") ;  
  13.             System.exit(1) ;  
  14.         }  
  15.         InputStream input = null ;      // 准备好输入流对象,读取源文件  
  16.         OutputStream out = null ;       // 准备好输出流对象,写入目标文件  
  17.         try{  
  18.             input = new FileInputStream(f1) ;  
  19.         }catch(FileNotFoundException e){  
  20.             e.printStackTrace() ;  
  21.         }  
  22.         try{  
  23.             out = new FileOutputStream(f2) ;  
  24.         }catch(FileNotFoundException e){  
  25.             e.printStackTrace() ;  
  26.         }  
  27.         if(input!=null && out!=null){   // 判断输入或输出是否准备好  
  28.             int temp = 0 ;    
  29.             try{  
  30.                 while((temp=input.read())!=-1){ // 开始拷贝  
  31.                     out.write(temp) ;   // 边读边写  
  32.                 }  
  33.                 System.out.println("拷贝完成!") ;  
  34.             }catch(IOException e){  
  35.                 e.printStackTrace() ;  
  36.                 System.out.println("拷贝失败!") ;  
  37.             }  
  38.             try{  
  39.                 input.close() ;     // 关闭  
  40.                 out.close() ;       // 关闭   
  41.             }catch(IOException e){  
  42.                 e.printStackTrace() ;  
  43.             }  
  44.         }  
  45.     }     




0 0