2015-09-25 44 views
0

我正在創建一個小程序,用於修改程序文件中保存的驅動程序字母。該方法的工作原理是正確定位文件並正確修改驅動器號。我怎樣才能讓這個緩衝作家一次寫一行? JAVA

但是,當它在更改後打開文件時,所有的目錄列表全部在一行上,但它們需要在每行中有1個目錄。我已經嘗試將每一行保存到一個數組列表中,然後將它們打印出來,但這似乎並不適用於我,所以想知道是否有人可以提供幫助?

非常感謝。

P.S.被瞎搞試圖使其工作,現在也遇到了另一個問題,即它現在打印他們全部成一行,但與空格例如之間:

S:\ DATA \ SAGE \

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

與您的問題沒有關係,但您應該考慮使用常量File.separator而不是您的文件名字符串中的硬編碼反斜槓 – Palamino

回答

1

問題是,readLine()讀取一整行,然後扔掉行結束。從文檔:

包含該行的內容,不包括任何行終止字符的字符串,或NULL,如果流的末尾已到達

所以,你必須將它添加再次,有可能使用你的平臺結束的首選路線:

bufferedWriter.write(String.format("%s%n", s); 

這裏%sString%n是依賴於平臺的行結束。

或者,如Ransom Briggs所示,您可以使用newline()newLine()更容易閱讀,並會稍微好一點的執行:

bufferedWriter.write(s); 
bufferedWriter.newLine(); 

我已經離開了String.format方法,因爲它是添加新行到字符串的更通用的方法。

1

嘗試PrintWriter - 如此new PrintWriter(bufferedWriter).println(s)

0

bufferedWriter.write(S)後,添加這個;:

bufferedWriter.write(System.getProperty("line.separator", "\n")); 

這將增加系統的具體行分隔符,或 「\ n」,如果系統屬性沒有設置。

+2

BufferedWriter提供了一個newLine()方法,它執行相同的操作。 http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#newLine() –

+0

@RansomBriggs是,'newLine()'。我只是想補充一點。 –

+0

你還可以加:) :) –

相關問題