开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

二:将内容追加到文件尾部

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





本文转自 vfast_chenxy 51CTO博客,原文链接:http://blog.51cto.com/chenxy/776491,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java-用简单方法创建透明窗口
Java-用简单方法创建透明窗口
0 0
Java String 的 常量池 和 intern 方法 简析
Java String 的 常量池 和 intern 方法 简析字符串常量池和 intern 方法 先举个例子,我们创建 10000 个相同的 String,并且不使用常量池 String[] list = new String[10000]; for (int i = 0; i < 10000; i++) { list[i] = new String(new char[]{'a','b','c'}); } 结果是:每个 String 都用新开的对象,占用大量内存 现在我们这样创建,增加一个 map ,key 和 value 内容一样,每次取的时候,先检查一下 map 里面有没
0 0
对Java程序main方法的一些思考
本文浅谈对Java程序main方法的一些思考
0 0
Java形参个数可变的方法
本文介绍Java支持的形参个数可变的方法。
0 0
Java的学习笔记(04)方法
Java方法01 方法是语句的集合,执行一个功能。方法再程序中被创建,再其他地方被引用 一个方法只做一个功能 方法的命名规则:首字母小写,驼峰规则。 package method; public class Demo01 { //mian 方法 public static void main(String[] args) { int sum = add(1,2); //调用一个方法:加法 // 实际参数:实际调用传递给
0 0
【Java编程进阶】方法初识
方法是组合在一起来执行操作语句的集合`,将具有独立功能的代码块组织成为一个整体,使其具有特殊功能,并且能实现达到代码复用的效果。例如我们要在程序中多次判断一个数字是奇数还是偶数,这时,我们就可以将判断一个数的奇偶性的代码段封装成一个方法,后面再使用时只需要调用这个方法,大大提高了编程的效率和代码的复用性。
0 0
算法java快速排序的两种方法(单边循环、双边循环)
算法java快速排序的两种方法(单边循环、双边循环)
0 0
java二分查找方法的实现和其优化(解决整数溢出)
java二分查找方法的实现和其优化(解决整数溢出)
0 0
Java练习题——抽象类、方法以及接口
由于三种动物都有共同属性:名字和属性,并且有共同行为:吃,所以只需要在共同父类(Animal)中编写标准Javabean类即可
0 0
Java练习题——方法(基础版)
求数组内最大值以及定义一个随机数组在之前已经介绍过了,只需要将这部分的代码打包放在一个方法内,并在main方法中调用即可
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA 应用排查全景图
立即下载
Java工程师必读手册
立即下载
Java应用提速(速度与激情)
立即下载