关于 文件操作 【JAVA_IO】的学习与总结。

来源:互联网 发布:淘宝营销亮点怎么写 编辑:程序博客网 时间:2024/06/06 19:56
BufferedWriter
     
java.io 
类 BufferedWriter
java.lang.Object
 java.io.Writer
     java.io.BufferedWriter
所有已实现的接口: 
Closeable, Flushable, Appendable 

public class BufferedWriterextends Writer将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 

可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。 

该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。

并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。 

通常 Writer 将其输出立即发送到底层字符或字节流。

除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。

例如, 

PrintWriter out
  = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
将缓冲 PrintWriter 对文件的输出。
如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。 
     
  
      类 BufferedReader


java.io 
类 BufferedReader
java.lang.Object
 java.io.Reader
     java.io.BufferedReader
所有已实现的接口: 
Closeable, Readable 
直接已知子类: 
LineNumberReader 

public class BufferedReader extends Reader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。 

通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。

因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如, 

BufferedReader in
  = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,
并将其转换为字符后返回,而这是极其低效的。 
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。 
     
     
                 类 FileReader
     
    
java.io 
类 FileReader
java.lang.Object
 java.io.Reader
     java.io.InputStreamReader
         java.io.FileReader
所有已实现的接口: 
Closeable, Readable 



public class FileReaderextends InputStreamReader用来读取字符文件的便捷类。
此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。
要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。 

FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。


类 FileWriter

java.io 
类 FileWriter
java.lang.Object
 java.io.Writer
     java.io.OutputStreamWriter
         java.io.FileWriter
所有已实现的接口: 
Closeable, Flushable, Appendable 



public class FileWriterextends OutputStreamWriter用来写入字符文件的便捷类。

此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。

要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。 

文件是否可用或是否可以被创建取决于底层平台。

特别是某些平台一次只允许一个 FileWriter(或其他文件写入对象)打开文件进行写入。

在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。 

FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream。 
     
     
   
     
一:FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。 

FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。 

一(1):

public class BufferedInputStream  extends FilterInputStream
BufferedInputStream 为另一个输入流添加一些功能,
即缓冲输入以及支持 mark 和 reset 方法的能力。
在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。
在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。
mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,
再次读取自最后一次 mark 操作后读取的所有字节。 




二:FileInputStream(File file) 

          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
        
       public class Propertiesextends Hashtable<Object,Object>Properties 类表示了一个持久的属性集。
       
       Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 


一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。 


因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法。
但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。相反,应该使用 setProperty 方法。
如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。
类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败。 


load(Reader) / store(Writer, String) 方法按下面所指定的、简单的面向行的格式在基于字符的流中加载和存储属性。
除了输入/输出流使用 ISO 8859-1 字符编码外,
load(InputStream) / store(OutputStream, String) 方法与 load(Reader)/store(Writer, String) 对的工作方式完全相同。
可以使用 Unicode 转义来编写此编码中无法直接表示的字符;转义序列中只允许单个 'u' 字符。
可使用 native2ascii 工具对属性文件和其他字符编码进行相互转换。 


 
        
        
        
  三:      Properties   的  load方法。
          
         
public void load(InputStream inStream)
         throws IOException从输入流中读取属性列表(键和元素对)。
         输入流按 load(Reader) 中所指定的、简单的面向行的格式,并假定使用 ISO 8859-1 字符编码;
         即每个字节都是 Latin1 字符。
         对于非 Latin1 的字符和某些特殊字符,可以使用 Unicode 转义以键和元素的形式来表示它们。 
此方法返回后,指定的流仍保持打开状态。 


参数:
inStream - 输入流。 
抛出: 
IOException - 如果读取输入流时发生错误。 
IllegalArgumentException - 如果输入流包含错误的 Unicode 转义序列。

四:Properties   的 getProperty方法'
public String getProperty(String key)用指定的键在此属性列表中搜索属性。
如果在此属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。
如果未找到属性,则此方法返回 null。 

参数:
key - 属性键。 
返回:

属性列表中具有指定键值的值。


[java] view plaincopyprint?
  1. package com.itm.Io;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.File;  
  6. import java.io.FileReader;  
  7. import java.io.FileWriter;  
  8. import java.io.IOException;  
  9.   
  10. /**  
  11.  * 文件处理工具类  
  12.  * @author samLee  
  13.  *  
  14.  */    
  15. public class FileUtil {    
  16.         
  17.     private static FileReader fr = null;    
  18.     private static BufferedReader bf = null;    
  19.     private static FileWriter fw = null;    
  20.     private static BufferedWriter bw = null;    
  21.     private static File tempFile_1 =null;    
  22.     private static File tempFile_2 =null;    
  23.         
  24.     /**  
  25.      * 文件复制  
  26.      * @param srcFile       源文件路径  
  27.      * @param targetFile    目标文件路径  
  28.      * @throws Exception    异常信息  
  29.      */    
  30.     public static void copy(String srcFile,String targetFile) throws IOException{    
  31.             
  32.         //如果目标路径的目录不存在,创建它 .  ----->>  targetFile  
  33.         String tempStr = targetFile.substring(0, targetFile.lastIndexOf("\\")+1);    
  34.         System.out.println("路径:" + tempStr);    
  35.         tempFile_2 = new File(tempStr);    
  36.             
  37.         if(!tempFile_2.exists()){    
  38.             tempFile_2.mkdirs();    
  39.         }    
  40.             
  41.         //初始化流    
  42.         fr = new FileReader(srcFile);  //  srcFile  
  43.         bf = new BufferedReader(fr);    
  44.           
  45.         fw = new FileWriter(targetFile);   //  targetFile  
  46.         bw = new BufferedWriter(fw);    
  47.             
  48.         tempFile_1 = new File(targetFile);  
  49.           
  50.         //读取第一行    
  51.         String str =  bf.readLine();    
  52.             
  53.         //判断文件有没有读取完    
  54.         while(str!=null){    
  55.             bw.write(str);    
  56.             bw.newLine();    
  57.             bw.flush();    
  58.             str = bf.readLine();    
  59.         }    
  60.             
  61.             
  62.         if(tempFile_1.exists()){    
  63.             System.out.println("文件复制成功");    
  64.         }    
  65.     }    
  66.         
  67.     /**  
  68.      * 关闭流  
  69.      */    
  70.     public static void close() throws IOException{    
  71.         bw.flush();    
  72.         bw.close();    
  73.         fw.close();    
  74.         bf.close();    
  75.         fr.close();    
  76.     }    
  77.       
  78.     public static void main(String[] args) {    
  79.         //这是我要copy的html文件,位于D盘根目录    
  80.         String srcFile = "D:\\example.html";    
  81.             
  82.         //这是我要copy的目标路径    
  83.         String targetFile = "D:\\htmlDir\\example.html";    
  84.             
  85.         try {    
  86.             FileUtil.copy(srcFile, targetFile);    
  87.             FileUtil.close();    
  88.         } catch (IOException e) {    
  89.             System.out.println("出现异常:");    
  90.             e.printStackTrace();    
  91.         }    
  92.     }    
  93. }    

运行结果:


路径:D:\htmlDir\
文件复制成功