FileInputStream的多个操作

时间:2014-12-18 11:57:20

标签: java fileinputstream

我有一个Java类来读取文件并将一些数据设置为类。我有一个班级

FileMetadata.java

public class FileMetadata implements Serializable {

    private String location;
    private Double size;
    private String content;
    private List<String> lines;
    private String md5Digest;

    //parameterized constructor
    //getters and setters
}

阅读完文件后,我想在此课程中设置值。

这是我阅读文件的方法。

FileUtil.java

public static void readFile(File file) throws IOException {
    FileInputStream fis = null;
    List<String> fileLines = new ArrayList<String>();
    try {
        fis = new FileInputStream(file);
        StringBuilder sb = new StringBuilder();
        StringBuilder sbLine = new StringBuilder();
        int ch;
        while ((ch = fis.read()) != -1) {
            String line = "" + (char) ch;
            sb.append(line);
            if(line.matches("(\r|\n)")) {
                fileLines.add(sbLine.toString());
                sbLine.setLength(0);
            } else {
                sbLine.append(line);
            }
        }
        String md5 = DigestUtils.md5Hex(fis);
        System.out.println(md5);
        System.out.println(sb.toString());
        System.out.println(getFileSizeInKB(file));
        for(String str : fileLines) {
            System.out.println(str);
        }
    } finally {
        if (fis != null) {
            fis.close();
        }
    }
}

但是列表没有正确显示,因为它在每行之后添加一个空字符串,因为下一行的文件是“\ r \ n”。第二次添加空StringBuilder,以便列表在每行之后获得额外的空字符串。 在添加到List之前,我可以尝试检查它的长度。但如果文件包含空行,我想添加到列表中。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用BufferedReader课程。

BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line=br.readLine())!=null) {
 ..............
}
br.close();
FileInputStream fis = new FileInputStream(file);
String md5 = DigestUtils.md5Hex(fis);
fis.close();

(示例中没有异常处理)。