我正在尝试创建一个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,没有提出问题,虽然你真的想以最谦逊的方式回答它,谢谢你。
我想知道应该写什么行来做那件事。就像,我不想复制粘贴我的整个代码,因为我不能分享它。基本上,我有它的部分可以实际写入文件,创建文件等。 。我只需要代码中的一行,将该文件中的一行跳到下一行。
答案 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。