2016-03-04 56 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添加到主要方法中,它将如何与参数进行比较,以便可以传递并打开并读取任何文件名? –