`
uule
  • 浏览: 6309068 次
  • 性别: 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读取数据库的XML配置文件

    JAVA读取数据库的XML配置文件. 前言.虽然现在有HEIBERNATE开源框架做为持久层,可以很好的解决这个问题. 当然,SSH这些开源框架,也必不是人人都得学去用.我个人就喜欢自已写几个常用的类在开发时可以多次使用... 下次...

    Java读取Excel文件的几种方法

    几种获取excel表格的方式方法,本文转载来自互联网

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

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

    基于Java的minio相关操作示例

    基于springboot的小型Java项目,主要与minio存储有关,包含了各种minio相关操作,包括新建bucket存储桶、查询文件列表、文件上传、下载、预览等。个人资源,请勿转载

    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源码 代码一键自动生成工具

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

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

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

    SweetScape 010 Editor 8 汉化版

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

    springmybatis

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

    双数据源实现数据库转换.zip

    @ConfigurationProperties:将配置文件中的数据源读取进到方法中,进行build ———————————————— 版权声明:本文为CSDN博主「To Believe Me」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文...

    asp.net知识库

    从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 ...

    二十三种设计模式【PDF版】

    所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...

Global site tag (gtag.js) - Google Analytics