在java控制台中显示分隔数据

cnh2zyt3  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(429)

因此,我尝试使用string.format将文件读取器读取的csv数据(分隔)显示到控制台上,以保持显示的干净。这是样本数据
颜色、数字、字母
红色,1002,x
蓝色,1769年
贪婪,1769,z
而我使用的代码如下

try {

                fr = new FileReader(filepath);
                Scanner scan = new Scanner(fr);
                scan.useDelimiter(",");
                while(scan.hasNext()) {
                    String t = scan.next();
                    t = String.format("%10s", t);
                    System.out.print(t);

我所观察到的是,由于分隔符的存在,前一行的最后一个字符串和当前行的第一个字符串(在示例数据中为粗体和斜体)被合并为一个字符串。每一行都会发生这种情况,会弄乱显示。我正在努力找到一种只使用string.format方法的方法。这是我必须接受的限制吗?

esyap4oy

esyap4oy1#

我不认为 Scanner 是从csv文件读取数据的方式。取而代之的是,使用一种更先进的方法,即 java.nio .
我想你的 filepath 是一个 String ,则可以将每行分别读入 List<String> 使用这行代码(您可能需要调整 StandardCharsets 值):

List<String> allLines = Files.readAllLines(Paths.get(filepath), StandardCharsets.ISO_8859_1);

如果您只想用 System.out ,你可以这样做,
它可以很好地用于小文件(将所有文件内容加载到ram中)

public static void main(String[] args) {
    // THIS HAS TO BE ADJUSTED TO YOUR PATH, OF COURSE
    String filePathString = "P:\\ath\\to\\your\\file.csv";

    Path filePath = Paths.get(filePathString);

    List<String> csvLines = new ArrayList<>();

    try {
        // This reads all the lines of the file into the List<String>
        csvLines = Files.readAllLines(filePath, StandardCharsets.ISO_8859_1);
    } catch (IOException e) {
        System.err.println("IOException while reading the csv file!");
        e.printStackTrace();
    }

    if (csvLines.size() > 0) {
        System.out.println(csvLines.size() + " lines read, here they are:\n");

        csvLines.forEach(csvLine -> {
            System.out.println(csvLine);
        });

    } else {
        System.err.println("No lines read...");
    }
}

对于大文件,应该使用 Stream (不会将所有内容加载到ram中)

public static void main(String[] args) {
    // THIS HAS TO BE ADJUSTED TO YOUR PATH, OF COURSE
    String filePathString = "P:\\ath\\to\\your\\file.csv";

    Path filePath = Paths.get(filePathString);

    List<String> csvLines = new ArrayList<>();

    try {
        // This is the only difference: streaming the file content line by line
        Files.lines(filePath, StandardCharsets.ISO_8859_1).forEach(line -> {
            csvLines.add(line);
        });
    } catch (IOException e) {
        System.err.println("IOException while reading the csv file!");
        e.printStackTrace();
    }

    if (csvLines.size() > 0) {
        System.out.println(csvLines.size() + " lines read, here they are:\n");

        csvLines.forEach(csvLine -> {
            System.out.println(csvLine);
        });

    } else {
        System.err.println("No lines read...");
    }

}

你不必使用 String.format(...) 完全

u7up0aaq

u7up0aaq2#

您是否也尝试使用“\n”?可能是scan.usedelimiter(“,\n”);

相关问题