`
uule
  • 浏览: 6359185 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

java读取文件总结(转载)

阅读更多

1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容

 

1、按字节读取文件内容

public   class  ReadFromFile {
    
/**
     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
     
*/
    
public   static   void  readFileByBytes(String fileName) {
        File file 
=   new  File(fileName);
        InputStream in 
=   null ;
        
try  {
            //  一次读一个字节
            in  =   new  FileInputStream(file);
            
int  tempbyte;
            
while  ((tempbyte  =  in.read())  !=   - 1 ) {
                System.out.write(tempbyte);
            }
            in.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
            
return ;
        }


        
try  {
            //  一次读多个字节
             byte [] tempbytes  =   new   byte [ 100 ];
            
int  byteread  =   0 ;
            in 
=   new  FileInputStream(fileName);
           
//  读入多个字节到字节数组中,byteread为一次读入的字节数
             while  ((byteread  =  in.read(tempbytes))  !=   - 1 ) {
                System.out.write(tempbytes, 
0 , byteread);
            }
        } 
catch  (Exception e1) {
            e1.printStackTrace();
        } 
finally  {
            
if  (in  !=   null ) {
                
try  {
                    in.close();
                } 
catch  (IOException e1) {
                }
            }
        }
    }

 

2、按字符读取文件内容
InputStreamReader 是 字节流通向字符流的桥梁 :它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader 。例如:

 BufferedReader in  = new BufferedReader(new InputStreamReader(System.in));

    

/**
     * 以字符为单位读取文件,常用于读文本,数字等类型的文件
     
*/
    
public   static   void  readFileByChars(String fileName) {
        File file 
=   new  File(fileName);
        Reader reader 
=   null ;
        
try  {
            System.out.println(
" 以字符为单位读取文件内容,一次读一个字节: " );
            
//  一次读一个字符
            reader  =   new  InputStreamReader( new  FileInputStream(file));
            
int  tempchar;
            
while  ((tempchar  =  reader.read())  !=   - 1 ) {
                
//  对于windows下,\r\n这两个字符在一起时,表示一个换行。
                
//  但如果这两个字符分开显示时,会换两次行。
                
//  因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
                 if  ((( char ) tempchar)  !=   ' \r ' ) {
                    System.out.print((
char ) tempchar);
                }
            }
            reader.close();
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
        
try  {
            System.out.println(
" 以字符为单位读取文件内容,一次读多个字节: " );
            
//  一次读多个字符
             char [] tempchars  =   new   char [ 30 ];
            
int  charread  =   0 ;
            reader 
=   new  InputStreamReader( new  FileInputStream(fileName));
            
//  读入多个字符到字符数组中,charread为一次读取字符数
             while  ((charread  =  reader.read(tempchars))  !=   - 1 ) {
                
//  同样屏蔽掉\r不显示
                 if  ((charread  ==  tempchars.length)
                        
&&  (tempchars[tempchars.length  -   1 !=   ' \r ' )) {
                    System.out.print(tempchars);
                } 
else  {
                    
for  ( int  i  =   0 ; i  <  charread; i ++ ) {
                        
if  (tempchars[i]  ==   ' \r ' ) {
                            
continue ;
                        } 
else  {
                            System.out.print(tempchars[i]);
                        }
                    }
                }
            }

        } 
catch  (Exception e1) {
            e1.printStackTrace();
        } 
finally  {
            
if  (reader  !=   null ) {
                
try  {
                    reader.close();
                } 
catch  (IOException e1) {
                }
            }
        }
    }

 

3、按行读取文件内容

BufferedReader从字符输入流中读取文本 ,缓冲各个字符,从而提供字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
建议用 BufferedReader 包装所有,其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader) 。例如,

 BufferedReader in  = new BufferedReader(new FileReader("foo.in")); 

 将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致 从文件中读取字节,并将其转换为字符后返回 ,而这是极其低效的
    
/**
     * 以行为单位读取文件,常用于读面向行的格式化文件
     
*/
    
public   static   void  readFileByLines(String fileName) {
        File file 
=   new  File(fileName);
        BufferedReader reader 
=   null ;
        
try  {
            System.out.println(
" 以行为单位读取文件内容,一次读一整行: " );
            reader 
=   new  BufferedReader( new  FileReader(file));
            String tempString 
=   null ;
            
int  line  =   1 ;
            
//  一次读入一行,直到读入null为文件结束
             while  ((tempString  =  reader.readLine())  !=   null ) {
                
//  显示行号
                System.out.println( " line  "   +  line  +   " "   +  tempString);
                line
++ ;
            }
            reader.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        } 
finally  {
            
if  (reader  !=   null ) {
                
try  {
                    reader.close();
                } 
catch  (IOException e1) {
                }
            }
        }
    }

 

4、随机读取文件内容
    
/**
     * 随机读取文件内容
     
*/
    
public   static   void  readFileByRandomAccess(String fileName) {
        RandomAccessFile randomFile 
=   null ;
        
try  {
            System.out.println(
" 随机读取一段文件内容: " );
            
//  打开一个随机访问文件流,按只读方式
            randomFile  =   new  RandomAccessFile(fileName,  " r " );
            
//  文件长度,字节数
             long  fileLength  =  randomFile.length();
            
//  读文件的起始位置
             int  beginIndex  =  (fileLength  >   4 ?   4  :  0 ;
            
//  将读文件的开始位置移到beginIndex位置。
            randomFile.seek(beginIndex);
            
byte [] bytes  =   new   byte [ 10 ];
            
int  byteread  =   0 ;
            
//  一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
            
//  将一次读取的字节数赋给byteread
             while  ((byteread  =  randomFile.read(bytes))  !=   - 1 ) {
                System.out.write(bytes, 
0 , byteread);
            }
        } 
catch  (IOException e) {
            e.printStackTrace();
        } 
finally  {
            
if  (randomFile  !=   null ) {
                
try  {
                    randomFile.close();
                } 
catch  (IOException e1) {
                }
            }
        }
    }

    
/**
     * 显示输入流中还剩的字节数
     
*/
    
private   static   void  showAvailableBytes(InputStream in) {
        
try  {
            System.out.println(
" 当前字节输入流中的字节数为: "   +  in.available());
        } 
catch  (IOException e) {
            e.printStackTrace();
        }
    }

    
public   static   void  main(String[] args) {
        String fileName 
=   " C:/temp/newTemp.txt " ;
        ReadFromFile.readFileByBytes(fileName);
        ReadFromFile.readFileByChars(fileName);
        ReadFromFile.readFileByLines(fileName);
        ReadFromFile.readFileByRandomAccess(fileName);
    }
}


5、将内容追加到文件尾部

public   class  AppendToFile {
    
/**
     * A方法追加文件:使用RandomAccessFile
     
*/
    
public   static   void  appendMethodA(String fileName, String content) {
        
try  {
            
//  打开一个随机访问文件流,按读写方式
            RandomAccessFile randomFile  =   new  RandomAccessFile(fileName,  " rw " );
            
//  文件长度,字节数
             long  fileLength  =  randomFile.length();
            
// 将写文件指针移到文件尾。
            randomFile.seek(fileLength);
            randomFile.writeBytes(content);
            randomFile.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        }
    }

    
/**
     * B方法追加文件:使用FileWriter
     
*/
    
public   static   void  appendMethodB(String fileName, String content) {
        
try  {
            
// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
            FileWriter writer  =   new  FileWriter(fileName,  true );
            writer.write(content);
            writer.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        }
    }

    
public   static   void  main(String[] args) {
        String fileName 
=   " C:/temp/newTemp.txt " ;
        String content 
=   " new append! " ;
        
// 按方法A追加文件
        AppendToFile.appendMethodA(fileName, content);
        AppendToFile.appendMethodA(fileName, 
" append end. \n " );
        
// 显示文件内容
        ReadFromFile.readFileByLines(fileName);
        
// 按方法B追加文件
        AppendToFile.appendMethodB(fileName, content);
        AppendToFile.appendMethodB(fileName, 
" append end. \n " );
        
// 显示文件内容
        ReadFromFile.readFileByLines(fileName);
    }
}


来源:http://www.cnblogs.com/lovebread/archive/2009/11/23/1609122.html

分享到:
评论

相关推荐

    java文件路径操作详细(转载)

    Java文件路径操作是Java开发中常见且重要的任务,无论是在读写文件、处理资源还是进行系统交互时,都需要对文件路径进行操作。本篇将详细探讨Java中的文件路径处理技术,主要涵盖以下知识点: 1. **File类**: ...

    JavaBean实体类 配置文件 代码一键自动生成工具

    ******原创非转载****** ******支持解析Powerdesiger物理逻辑图****** ******非JAVA源码****** 代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、...

    Java实现文件下载

    - 使用`File`类创建一个文件对象,然后通过`FileInputStream`读取文件内容。 - 设置响应头信息,包括`Content-Type`(表示文件类型),`Content-Disposition`(设置文件名,告诉浏览器以下载方式处理)。 - 使用`...

    深入分析 Java I/O 的工作机制(转载)

    Java提供了许多预定义的流类,例如FileInputStream和FileOutputStream分别用于读取和写入文件,而SocketInputStream和SocketOutputStream则用于网络通信。 3. **缓冲区** 为了提高效率,Java I/O系统使用缓冲区...

    C programming-读取DAT数据,转成wav格式文件

    DAT数据格式 5A 5A 5A 5A xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...然后根据wav文件结构将其写入wav文件。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yanhc519/archive/2009/12/05/4946228.aspx

    Java利用Preferences设置个人偏好,转载自:燕窝

    文章中提到的"用 Preferences API 存储对象.mht"文件可能是一个包含完整教程或者示例代码的MHT(单一文件网页)文档,里面可能详述了如何将对象序列化后存入Preferences以及如何读取这些对象。 总之,Preferences ...

    抽奖软件java

    7. **异常处理**:为了保证程序的健壮性,开发者会使用try-catch语句来捕获和处理可能出现的异常,例如读取文件时的IOException。 8. **设计模式**:良好的软件设计通常会运用设计模式,比如单例模式用于控制抽奖...

    使用urlconnection下载文件或图片并保存到本地

    import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; /** * 使用URLConnection下载文件或图片并保存到本地...

    JAVA源码 代码一键自动生成工具

    ******原创非转载****** ******支持解析Powerdesiger物理逻辑图****** ******JAVA源码****** 代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、mybatis....

    记事本源码(完整)

    3. **文件I/O操作**:记事本需要读取和保存文件,这就涉及到Java的File、FileInputStream、FileOutputStream类以及BufferedReader和PrintWriter等流类的使用。 4. **事件监听**:在Java GUI应用中,用户与界面的...

    javac的词法分析,转载自:百度文库

    1. **输入读取**:`javac`首先读取源代码文件的每个字符,并创建一个字符流。 2. **字符分类**:根据Java的词法规则,识别出单词字符、空白字符、换行符等。 3. **词法单元生成**:词法分析器通过滑动窗口的方式,从...

    Hibernate缓存机制,转载

    **标题:“Hibernate缓存机制,转载”** **描述:**这篇博客主要探讨了Hibernate框架中的缓存机制,包括一级缓存和二级缓存的概念、工作原理以及如何在实际开发中应用。 **标签:“源码 工具”** **知识点详解:*...

    SweetScape 010 Editor 8 汉化版

    二进制文件是指那些可由计算机 读取,而无法被人读取的文件(如果在文本编辑器中打开二进制文件,其中的内容将以垃圾字符显示)。十六进制编辑器是一种允许您查看和编辑二进制文件中个别 字节的程序,而高级的十六...

    C#合并word文档类

    1. **打开文档**:类可能包含一个方法,用于加载多个Word文档到内存中,这通常涉及到读取文件内容并将其转换为适当的对象模型。 2. **文档合并逻辑**:这是类的核心部分,它会将多个文档的内容整合到一个新文档中。...

    关于struts-menu的简单使用方法(静态的取XML的方式-转载)

    静态方式获取XML配置意味着每次应用启动时,都会一次性读取并解析XML文件,生成菜单结构。这种方式适合菜单不经常变动的情况。 总的来说,Struts-menu是一个强大的工具,它通过XML配置文件简化了Java Web应用中菜单...

    Servlet和Struts2的交互(转载)

    在service()方法中,开发者可以根据请求的方法(GET、POST等)进行不同的操作,如读取请求参数、处理业务逻辑、生成响应内容。 Struts2框架则是对Servlet的一种封装,它提供了一个更易于管理和扩展的架构。在Struts...

    springmybatis

    5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis...

    deeplearning4j.zip (自己封装,deeplearning4j和apache的资源)欢迎转载

    4. **数据读取和预处理**:内置数据集加载器,支持CSV、HDFS、MongoDB等数据源,并提供数据预处理工具。 5. **模型部署**:可以将训练好的模型导出为Java字节码或ONNX格式,方便在生产环境中集成。 ** Apache Maven...

    android好用10个源码!

    通过这个源码,你可以学习到如何使用`java.io`和`java.nio`包进行文件操作,以及如何构建用户友好的文件选择界面。 2. **3_contact.rar**:这个源码涉及到Android联系人管理,演示了如何访问和操作系统的联系人数据...

Global site tag (gtag.js) - Google Analytics