[Java]读取文件方法大全

简介: public class ReadFromFile {          public static void readFileByBytes(String fileName) {         File file = new File...
public   class  ReadFromFile {
    

    
public   static   void  readFileByBytes(String fileName) {
        File file 
=   new  File(fileName);
        InputStream in 
=   null ;
        
try  {
            System.out.println(
" 以字节为单位读取文件内容,一次读一个字节: " );
            
//  一次读一个字节
            in  =   new  FileInputStream(file);
            
int  tempbyte;
            
while  ((tempbyte  =  in.read())  !=   - 1 ) {
                System.out.write(tempbyte);
            }
            in.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
            
return ;
        }
        
try  {
            System.out.println(
" 以字节为单位读取文件内容,一次读多个字节: " );
            
//  一次读多个字节
             byte [] tempbytes  =   new   byte [ 100 ];
            
int  byteread  =   0 ;
            in 
=   new  FileInputStream(fileName);
            ReadFromFile.showAvailableBytes(in);
            
//  读入多个字节到字节数组中,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) {
                }
            }
        }
    }

    

    
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) {
                }
            }
        }
    }

    

    
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) {
                }
            }
        }
    }

    

    
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 {
    

    
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();
        }
    }

    

    
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);
    }
}
目录
相关文章
|
8天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
25 0
|
8天前
|
Java
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
|
1天前
|
Arthas 安全 Java
java服务报错 FileNotFoundException:打开的文件过多
java服务报错 FileNotFoundException:打开的文件过多
9 0
|
2天前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
17 0
|
4天前
|
Oracle Java 关系型数据库
windows 下 win11 JDK17安装与环境变量的配置(配置简单详细,包含IJ中java文件如何使用命令运行)
本文介绍了Windows 11中安装JDK 17的步骤,包括从官方网站下载JDK、配置环境变量以及验证安装是否成功。首先,下载JDK 17的安装文件,如果没有Oracle账户,可以直接解压缩文件到指定目录。接着,配置系统环境变量,新建`JAVA_HOME`变量指向JDK安装路径,并在`Path`变量中添加。然后,通过命令行(cmd)验证安装,分别输入`java -version`和`javac -version`检查版本信息。最后,作者分享了如何在任意位置运行Java代码,包括在IntelliJ IDEA(IJ)中创建的Java文件,只需去掉包声明,就可以通过命令行直接运行。
|
6天前
|
存储 监控 Java
如何在Java中实现等待文件修改后再读取数据的功能?
如何在Java中实现等待文件修改后再读取数据的功能?
14 0
|
6天前
|
存储 Java 数据格式
Java实战:轻松掌握文件重命名与路径提取技巧
Java实战:轻松掌握文件重命名与路径提取技巧
15 0
|
6天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
35 0
|
8天前
|
Java API
【亮剑】Java的List,如何删除重复的元素,教你三个方法搞定!
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。
|
9天前
|
IDE Java 开发工具
基于Java程序设计的实验教学方法优化与实践
基于Java程序设计的实验教学方法优化与实践
21 1