2012-08-30 83 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); 
} 

,以使其发挥作用。试试看。