2012-08-30 118 views
-7

我製作了一個NotePad程序。問題是它不以.txt格式保存,它保存爲沒有格式的文件。但它可以打開.txt文件。我該如何解決它? 這是我的工作。保存爲.txt格式

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.Scanner; 
import java.io.*; 

public class NotePad extends JFrame { 

    private JTextArea noteArea; 


    public static void main(String[] args) { 
     NotePad p = new NotePad(); 
     p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     p.setSize(500,300); 
     p.setVisible(true); 
    } 


    public NotePad() { 
     super("Java Notepad"); 
     setLayout(new BorderLayout()); 
     noteArea = new JTextArea("",20,20); 
     noteArea.setWrapStyleWord(true); 
     noteArea.setLineWrap(true); 

     Font font = new Font("sanserif", Font.BOLD,14); 
     noteArea.setFont(font); 

     JScrollPane scroller = new JScrollPane(noteArea); 
     scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     add(scroller,BorderLayout.CENTER); 


     JMenuBar menuBar = new JMenuBar(); 
     JMenu fileMenu = new JMenu("File"); 
     JMenuItem openMenu = new JMenuItem("Open"); 
     openMenu.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       JFileChooser openFile = new JFileChooser(); 
       openFile.showOpenDialog(new NotePad()); 
       loadFile(openFile.getSelectedFile()); 
      } 


     }); 
     JMenuItem saveMenu = new JMenuItem("Save"); 
     saveMenu.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       JFileChooser saveFile = new JFileChooser(); 
       saveFile.showSaveDialog(new NotePad()); 
       fileSaved(saveFile.getSelectedFile()); 
      } 

     }); 

     JMenuItem exitMenu = new JMenuItem("Close"); 
     exitMenu.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent ae) { 
       System.exit(0); 
      } 

     }); 

     fileMenu.add(openMenu); 
     fileMenu.add(saveMenu); 
     fileMenu.add(exitMenu); 
     menuBar.add(fileMenu); 
     this.setJMenuBar(menuBar); 

    } 

    public void loadFile(File file) { 
     noteArea.setText(""); 
     try { 

      BufferedReader read = new BufferedReader(new FileReader(file)); 
      String line = null; 

      while((line =read.readLine())!=null) { 
       noteArea.append(line +"\n"); 
      } 
      read.close(); 
     } 
     catch (Exception e) { 
     System.out.println("Error " + e.toString()); 
     } 
    } 


    public void fileSaved(File file) { 
     try { 
      PrintWriter writer = new PrintWriter(file); 
      String[] lines = noteArea.getText().split("\\n"); 
      for (String) { 

       writer.println(words); 

      } 
      writer.close(); 
     } catch (Exception e) { 
      System.out.println("Error " + e.toString()); 
     } 
    } 
} 

btw我不能發佈我的問題,因爲不解釋根據該網站的情況。那麼。感謝您的幫助

+1

你確定輸出不是文本格式嗎?!? .txt不是格式,而是擴展名... – Parallelis

+1

如果您在Windows上運行,請在Windows資源管理器的視圖選項中關閉「隱藏已知文件擴展名」。 – dasblinkenlight

+4

'「順便說一句,我不能發佈我的問題,因爲不解釋根據該網站的情況」?什麼 ???? –

回答

2

您需要確保在輸出文件名的末尾添加「.txt」擴展名(如果不存在)。 Java和Windows是不會爲你做它...

public void fileSaved(File file) { 
    String name = file.getPath(); 
    if (!name.toLowerCase().endsWith(".txt")) { 
     name += ".txt"; 
     file = new File(name); 
    } 

    //... 

這是相當沉重的手,因爲我還沒有檢查,看看是否用戶提供了不同的擴展名,但我覺得記事本基本上沒有同樣的事情:P

0

每個文件名由兩部分組成: - NAME和EXTENSION。 記事本,默認保存爲.txt,但並非總是如此。

你需要給擴展爲

public void fileSaved(File file) { 
String name = file.getPath(); 
if (!name.toLowerCase().endsWith(".txt")) { 
    name += ".txt"; 
    file = new File(name); 
} 

,以使其發揮作用。試試看。