我的代码工作正常,但是它并排打印值,而不是逐行打印。像这样:
iatadult,DDD,
iatfirst,AAA,BBB,CCC
我已经对stackoverflow进行了认真的搜索,但我的解决方案似乎都不起作用。我知道我必须在循环进行时进行更改。但是,我所看到的例子都没有奏效。任何进一步的理解或达到我的目标的技术都将有所帮助。我所缺少的可能很小。请帮忙。
String folderPath1 = "C:\\PayrollSync\\client\\client_orginal.txt";
File file = new File (folderPath1);
ArrayList<String> fileContents = new ArrayList<>(); // holds all matching client names in array
try {
BufferedReader reader = new BufferedReader(new FileReader(file));// reads entire file
String line;
while (( line = reader.readLine()) != null) {
if(line.contains("fooa")||line.contains("foob")){
fileContents.add(line);
}
//---------------------------------------
}
reader.close();// close reader
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println(fileContents);
答案 0 :(得分:2)
添加换行符,然后再添加到fileContents
。
fileContents.add(line+"\n");
答案 1 :(得分:2)
通过在执行操作时直接打印列表,可以调用为列表覆盖的方法toString()
,该方法将打印如下内容:
obj1.toString(),obj2.toString() .. , objN.toString()
在您的情况下,obj*
的类型为String
,并且对其进行覆盖的toString()
返回字符串本身。这就是为什么您看到所有用逗号分隔的字符串。
要做一些不同的事情,即:将每个对象打印在单独的一行中,您应该自己实现,并且可以在每个字符串之后简单地添加新的行字符('\n'
)。
Java 8中可能的解决方案:
String result = fileContents.stream().collect(Collectors.joining('\n'));
System.out.println(result);
答案 2 :(得分:1)
一种独立于平台的方式来添加新行:
fileContents.add(line + System.lineSeparator);
答案 3 :(得分:1)
以下是我的完整答案。感谢您的帮助stackoverflow。我花了一整天,但我有一个完整的解决方案。
File file = new File (folderPath1);
ArrayList<String> fileContents = new ArrayList<>(); // holds all matching client names in array
try {
BufferedReader reader = new BufferedReader(new FileReader(file));// reads entire file
String line;
while (( line = reader.readLine()) != null) {
String [] names ={"iatdaily","iatrapala","iatfirst","wpolkrate","iatjohnson","iatvaleant"};
if (Stream.of(names).anyMatch(line.trim()::contains)) {
System.out.println(line);
fileContents.add(line + "\n");
}
}
System.out.println("---------------");
reader.close();// close reader
} catch (Exception e) {
System.out.println(e.getMessage());
}