2014-06-24 15 views
0

這裏是我的readFromFile代碼:爲什麼此代碼讀取文件路徑而不是文件內的文本?

private void readFromFile(String file) { 
    String string = ""; 
    //reading 
    try{ 
     InputStream ips=new FileInputStream(filename); 
     InputStreamReader ipsr=new InputStreamReader(ips); 
     BufferedReader br=new BufferedReader(ipsr); 
     String line; 
     while ((line=br.readLine())!=null){     
      string += line + "\n"; 
     } 
     br.close(); 
     txaConversation.setText(string); 
    }  
    catch (Exception e){ 
     System.out.println(e.toString()); 
    } 
} 

下面是我在對話框中的 「Load按鈕」 的代碼:

JFileChooser fc = new JFileChooser(); 

    int choice = fc.showOpenDialog(null); 
    if (choice == JFileChooser.APPROVE_OPTION) { 
     String filename = fc.getSelectedFile().getAbsolutePath(); 
     readFromFile(filename); 
     txaConversation.setText(filename); 
    } 

而且在你將被要求的情況下,這裏的將writeToFile代碼:

private void writeToFile(String filename) { 
    try { 
     String content = txaConversation.getText(); 
     File file = new File(filename); 
     // if file doesnt exists, then create it 
     if (!file.exists()) { 
      file.createNewFile(); 
     } 

     FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write(content); 
     bw.close(); 

     System.out.println("Done"); 

} catch (IOException e) { 
     e.printStackTrace(); 
} 
} 

而「按鈕保存」代碼:

JFileChooser fc = new JFileChooser(); 

    int choice = fc.showSaveDialog(null); 
    if (choice == JFileChooser.APPROVE_OPTION) { 
     String filename = fc.getSelectedFile().getAbsolutePath(); 
     txaConversation.setText(filename); 
     writeToFile(filename); 
    } 

當我保存並從我的電腦打開文本文件時,我可以看到文本。但是當我使用我的程序加載它時,它向我顯示文件路徑。

+0

'writeToFile(filename);'這一行將文件名寫入文件,所以它是有意義的,這就是文件將包含的內容 –

回答

0

應該ips.readLine()而不是br.readLine()

 int line; 
     while ((line=ips.read())!=-1){     
      string += (char)line ; 
     } 

而且沒有必要的

InputStreamReader ipsr=new InputStreamReader(ips); 
    BufferedReader br=new BufferedReader(ipsr); 
+0

'FileInputStream'也有一個構造函數,它將String fileName作爲參數 –

0

你的意思是在你的UI它顯示了文件的名稱,而不是內容?

JFileChooser fc = new JFileChooser(); 
int choice = fc.showOpenDialog(null); 
if (choice == JFileChooser.APPROVE_OPTION) { 
    String filename = fc.getSelectedFile().getAbsolutePath(); 
    readFromFile(filename); // This reads the file content, but does not store it 
    txaConversation.setText(filename); // Previous content of filename variable is the absolute path 
} 

更改最後兩行到以下內容,你反而會顯示文件的內容

filename = readFromFile(filename); 
txaConversation.setText(filename); 

,改變你的readFromFile方法如下

private String readFromFile(String file) { 
    String string = ""; 
    //reading 
    try{ 
     InputStream ips=new FileInputStream(filename); 
     InputStreamReader ipsr=new InputStreamReader(ips); 
     BufferedReader br=new BufferedReader(ipsr); 
     String line; 
     while ((line=br.readLine())!=null){     
      string += line + "\n"; 
     } 
     br.close(); 
    }  
    catch (Exception e){ 
     System.out.println(e.toString()); 
    } 
    return string; 
} 

我也強烈建議你看看finally-block的資源處理

相關問題