我正在创建一个小程序,它将修改保存在程序文件中的驱动程序字母。该方法的工作原理是它正确定位文件并正确修改驱动器号。
但是当我在更改文件后打开文件时,所有目录列表都在一行上,但每行需要一个目录。我已经尝试将每个单独的行保存到数组列表然后将其打印出来,但这对我来说似乎没有用,所以想知道是否有人可以提供帮助?
非常感谢。
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");
}
}
答案 0 :(得分:1)
尝试PrintWriter - 所以new PrintWriter(bufferedWriter).println(s)
。
答案 1 :(得分:1)
问题是readLine()
读取整行,然后抛弃结束的行。来自文档:
包含行内容的字符串,不包括任何行终止字符;如果已到达流的末尾,则为null
所以你必须再次添加它,可能使用你的平台的首选行结束:
bufferedWriter.write(String.format("%s%n", s);
此处%s
是String
,%n
是平台相关的行结尾。
或者,如Ransom Briggs所示,您可以使用newline()
。 newLine()
更易于阅读,效果会稍好一些:
bufferedWriter.write(s);
bufferedWriter.newLine();
我已经离开了String.format
方法,因为这是向字符串添加换行符的更常规方法。
答案 2 :(得分:0)
在bufferedWriter.write之后添加:;
bufferedWriter.write(System.getProperty("line.separator", "\n"));
这将添加系统特定的行分隔符,或者&#34; \ n&#34;如果未设置系统属性。