2016-03-04 53 views
0

我正在使用Java中的文本編輯器作爲有趣的一面項目。當我導出項目時,我將可執行JAR文件轉換爲「.exe」,以便我可以將文本編輯器設置爲默認程序以打開「.txt」文件。我可以運行「.exe」並寫入文本,然後保存文件,並保存文件,但是當我嘗試使用文本編輯器打開文件時,文件內容不會保存;不過,我可以用記事本打開同一個文件,並顯示文件的內容。該文件在Eclipse中保存良好。我需要解決什麼問題才能在我用文本編輯器打開文件時顯示文件內容?Java程序不保存「.txt」文件的內容

這裏是我的代碼:

public class Open extends JFrame implements KeyListener { 

    JPanel panel = new JPanel(); 
    JTextArea textArea = new JTextArea(); 
    JScrollPane scrollPane = new JScrollPane(textArea); 

    JMenuBar menuBar = new JMenuBar(); 
    JMenu menu; 
    JMenuItem item; 
    Font systemFont; 

    public Open() { 

     systemFont = new Font("Times New Roman", Font.PLAIN, 20); 

     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(false); 
     textArea.setFont(systemFont); 
     panel.setLayout(new BorderLayout()); 
     panel.add(scrollPane); 
     add(panel); 

     menu = new JMenu("File"); 
     item = new JMenuItem("Save As"); 

     item.setAccelerator(KeyStroke.getKeyStroke('S', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); 

     item.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent ae) { 

       JFileChooser JFC = new JFileChooser(); 
       File fileName = new File(""); 
       BufferedWriter writer = null; 

       try { 

        int rVal = JFC.showSaveDialog(Open.this); 
        if(rVal == JFileChooser.APPROVE_OPTION) { 

         writer = new BufferedWriter(new FileWriter(JFC.getSelectedFile())); 
         writer.write(textArea.getText()); 

        } 
       } catch(Exception e) { 
        e.printStackTrace(); 
       } finally { 
        if(writer != null) { 
         try { 
          writer.close(); 
         } catch(IOException e) { 
          e.printStackTrace(); 
         } 

        } 

       } 

      } 

     }); 

     menu.add(item); 
     menuBar.add(menu); 

     menu = new JMenu("Edit"); 
     item = new JMenuItem("Undo"); 

     menu.add(item); 

     menu.add(item); 


     menuBar.add(menu); 



     add("North", menuBar); 


     setLookAndFeel();  
     frameDetails("Text Editor"); 

    } 

    public void frameDetails(String title) { 

     setSize(700, 500); 
     setLocationRelativeTo(null); 
     setTitle(title); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    public void setLookAndFeel() { 

     try { 

UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); 
      SwingUtilities.updateComponentTreeUI(this); 

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

    public static void main(String[] args) { 

     Open editor = new Open(); 

    } 

} 

這裏的代碼保存按鈕位:

item.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent ae) { 

     JFileChooser JFC = new JFileChooser(); 
     File fileName = new File(""); 
     BufferedWriter writer = null; 

      try { 

       int rVal = JFC.showSaveDialog(Open.this); 
       if(rVal == JFileChooser.APPROVE_OPTION) { 

        writer = new BufferedWriter(new FileWriter(JFC.getSelectedFile())); 
        writer.write(textArea.getText()); 

       } 
      } catch(Exception e) { 
       e.printStackTrace(); 
      } finally { 
       if(writer != null) { 
        try { 
         writer.close(); 
        } catch(IOException e) { 
         e.printStackTrace(); 
        } 

       } 

      } 

     } 

    }); 
+2

你應該發佈一個最小的代碼示例,顯示你的問題... – Markus

+2

編輯你的問題,幷包括讀取現有文本文件的代碼。 – VGR

+0

您顯示的代碼不會嘗試讀取任何文件。 – FredK

回答

1

你永遠讀的文本文件。爲了做到這一點,請使用像這樣的東西

public void loadFile(JTextArea area, String path, String file) 
{ 
    try 
    { 
     area.read(new FileReader(path + file), "Default"); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

注意:您不必在方法中具有此功能。您可以使用try - catch代碼

+1

要使用'JTextArea'的'read(...)'方法讀取文件。不要重新發明輪子。 – camickr

+0

@camickr更好嗎? – Jonah

+0

是的,但你仍然可能想使用BufferedReader。 – camickr

0

要充當默認文本編輯器,您的程序需要接受文件名作爲main(String [] args)的參數。它應該驗證文件是否存在,然後打開它,閱讀它的內容並關閉它。

此外,當您保存文件時,您應該在將新版本覆蓋之前將其重命名爲「name.bak」或「name〜」,以免在保存過程中出現問題。

+0

如果我將一個FileReader添加到主要方法中,它將如何與參數進行比較,以便可以傳遞並打開並讀取任何文件名? –