我怎样才能让这个缓冲的作者一次写一行? JAVA
How can I get this buffered writer to write one line at a time? JAVA
我正在创建一个小程序来修改保存在程序文件中的驱动程序字母。该方法在正确定位文件并正确修改驱动器号的意义上起作用。
然而,当我在文件被更改后打开文件时,所有目录列表都在一行上,但每行需要 1 个目录。我试过将每一行保存到一个数组列表中,然后像这样打印出来,但这对我来说似乎不起作用,所以想知道是否有人可以提供帮助?
非常感谢。
P.S。一直在努力让它工作,现在 运行 进入另一个问题,它现在将它们全部打印成一行,但中间有空格,例如:
S:\D A T A\ S A G E\
public class copy
{
private String newDriveLetter;
private String line;
private Path[]sageFolders;
private FileReader fileReader;
private BufferedReader bufferedReader;
private FileWriter fileWriter;
private BufferedWriter bufferedWriter;
private List<String> lines = new ArrayList<String>();
public void scanFiles() throws IOException{
try
{
System.out.println("Sage 2015 is Installed on this machine");
File companyFile = new File(sageFolders[8] + "\COMPANY");
fileReader = new FileReader(companyFile);
bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null)
{
if(line.contains("F"))
{
line = line.replace("F:\","S:\");
lines.add(line);
}
}
//Close the Readers
fileReader.close();
bufferedReader.close();
fileWriter = new FileWriter(companyFile);
bufferedWriter = new BufferedWriter(fileWriter);
for(String s : lines)
{
bufferedWriter.write(s);
}
bufferedWriter.flush();
bufferedWriter.close();
}
catch(FileNotFoundException e)
{
System.out.println("File not Found: Moving onto next Version");
}
}
试试 PrintWriter - 所以 new PrintWriter(bufferedWriter).println(s)
。
在 bufferedWriter.write(s) 之后添加这个;:
bufferedWriter.write(System.getProperty("line.separator", "\n"));
这将添加系统特定的行分隔符,如果系统 属性 未设置,则添加“\n”。
问题是 readLine()
读取了整行,然后丢掉了行尾。来自文档:
A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
因此您必须重新添加它,可能使用适合您平台的首选行结尾:
bufferedWriter.write(String.format("%s%n", s);
这里 %s
是 String
和 %n
是依赖于平台的行结尾。
或者,如 Ransom Briggs 所示,您可以使用 newline()
。 newLine()
更容易阅读并且性能会更好:
bufferedWriter.write(s);
bufferedWriter.newLine();
我保留了 String.format
方法,因为它是向字符串添加换行符的更通用方法。
我正在创建一个小程序来修改保存在程序文件中的驱动程序字母。该方法在正确定位文件并正确修改驱动器号的意义上起作用。
然而,当我在文件被更改后打开文件时,所有目录列表都在一行上,但每行需要 1 个目录。我试过将每一行保存到一个数组列表中,然后像这样打印出来,但这对我来说似乎不起作用,所以想知道是否有人可以提供帮助?
非常感谢。
P.S。一直在努力让它工作,现在 运行 进入另一个问题,它现在将它们全部打印成一行,但中间有空格,例如:
S:\D A T A\ S A G E\
public class copy
{
private String newDriveLetter;
private String line;
private Path[]sageFolders;
private FileReader fileReader;
private BufferedReader bufferedReader;
private FileWriter fileWriter;
private BufferedWriter bufferedWriter;
private List<String> lines = new ArrayList<String>();
public void scanFiles() throws IOException{
try
{
System.out.println("Sage 2015 is Installed on this machine");
File companyFile = new File(sageFolders[8] + "\COMPANY");
fileReader = new FileReader(companyFile);
bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null)
{
if(line.contains("F"))
{
line = line.replace("F:\","S:\");
lines.add(line);
}
}
//Close the Readers
fileReader.close();
bufferedReader.close();
fileWriter = new FileWriter(companyFile);
bufferedWriter = new BufferedWriter(fileWriter);
for(String s : lines)
{
bufferedWriter.write(s);
}
bufferedWriter.flush();
bufferedWriter.close();
}
catch(FileNotFoundException e)
{
System.out.println("File not Found: Moving onto next Version");
}
}
试试 PrintWriter - 所以 new PrintWriter(bufferedWriter).println(s)
。
在 bufferedWriter.write(s) 之后添加这个;:
bufferedWriter.write(System.getProperty("line.separator", "\n"));
这将添加系统特定的行分隔符,如果系统 属性 未设置,则添加“\n”。
问题是 readLine()
读取了整行,然后丢掉了行尾。来自文档:
A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
因此您必须重新添加它,可能使用适合您平台的首选行结尾:
bufferedWriter.write(String.format("%s%n", s);
这里 %s
是 String
和 %n
是依赖于平台的行结尾。
或者,如 Ransom Briggs 所示,您可以使用 newline()
。 newLine()
更容易阅读并且性能会更好:
bufferedWriter.write(s);
bufferedWriter.newLine();
我保留了 String.format
方法,因为它是向字符串添加换行符的更通用方法。