Java方法每次调用时都要将新行写入文件

时间:2015-03-11 16:10:57

标签: java file java.util.scanner

我正在尝试创建一个java方法,该方法将写入已创建的CSV文件。每次从类调用该方法时,它都应该附加该类的所有字段,用逗号分隔,然后跳到下一行。

我的班级整体看起来像:

Student bob = new Student("Bob", "Johnson", "10111990", "B+");
// call bob on the addStudentInfo:
bob.addStudentInfo(); 
//this should add to the file student.txt with a line containing the 4 fields. 
编辑:woops,没有提出问题,虽然你真的想以最谦逊的方式回答它,谢谢你。

我想知道应该写什么行来做那件事。就像,我不想复制粘贴我的整个代码,因为我不能分享它。基本上,我有它的部分可以实际写入文件,创建文件等。 。我只需要代码中的一行,将该文件中的一行跳到下一行。

1 个答案:

答案 0 :(得分:0)

以下内容将学生记录附加到文件中。无论旧内容如何。

public class Student {

    private static final char SEPARATOR = ',';
    private static final String NEWLINE = "\r\n";
    private static final Charset CHARSET = StandardCharsets.UTF_8;

    public void addStudentInfo() throws IOException {
        Path path = Paths.get(".../student.txt");
        StringBuilder sb = new StringBuilder();
        if (!Files.exists(path)) {
            sb.append("\uFEFF")
                .append("First name").append(SEPARATOR)
                ...
                .append(NEWLINE);
        }
        sb.append(...).append(SEPARATOR).append(...).append(NEWLINE);
        Files.write(path,
            Collections.singletonList(sb),
            CHARSET,
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    }

这使用Windows行尾和UTF-8编码。因此,在每台计算机上,无论是Linux,中国还是其他任何计算机,此应用程序都将呈现相同的文件格式。

当文件为空时,会写入标题行。 在这种情况下,作为第一个字符,Unicode BOM字符(零宽度空间)写为U + FEFF。 这将文件标记为Unicode,否则Windows将采用当前Windows ANSI编码,该编码因区域而异。 (但是,在阅读全部内容时,BOM是可选的,丑陋的,不可见的并且可能会造成严重破坏。)

StringBuilder是一个CharSequence(和String一样),这个版本的Files.write写一个Iterable<CharSequence>;因此我们创建一个包含一个元素的List。