因此,我尝试使用String.format将文件读取器读取的CSV数据(定界)显示在控制台上,以保持显示整洁。 这是示例数据
颜色,数字, 字母
红色 ,1002,X
蓝色,1769年,Y
贪婪,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 方法的方法。这是我必须接受的限制吗?
答案 0 :(得分:0)
您还尝试使用“ \ n”吗?可能是scan.useDelimiter(“,\ n”);
答案 1 :(得分:0)
我不认为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(...)