[Java]读取文件方法大全详解编程语言

1、按字节读取文件内容

2、按字符读取文件内容

3、按行读取文件内容

4、随机读取文件内容

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 {
    

/**

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/17852.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论