2011-11-28 2 views
2

JTextArea에서 파일을 열고 그 파일에 쓰고 읽으려고합니다. 드디어 FileReader를 사용하여 JTextArea에서 열어 본 다음 FileWriter를 통합하려고 시도했습니다. 이제는 텍스트 영역에서 다시 열 수 없습니다. 나는 특정 파일을 여는 FileChooser를 보여주는 예제를 보았지만, 사용자가 FileChooser를 사용하여 브라우저에 파일을 열 수 있도록 변수를 전달할 수있게하려고합니다. 코드를 깨면 OpenLister 메서드에 파일 판독기를 추가하고있었습니다. FileReader와 FileWriter를 동일한 ActionListener에 두는 것이 일반적인 관행입니까? 좋은 예를 들어 어떤 지시 나 조언을 주시면 감사하겠습니다. 아래 코드를 복사했습니다.JTextArea에서 파일을 열고 FileReader 및 FileWriter 클래스를 사용하여 읽고 쓰는 방법

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

public class ClassChooser extends JFrame implements ActionListener 
{ 
//create a label 
private JLabel response; 
File file; 
//menu tabs 
private JMenu fileMenu; 
private JMenu editMenu; 
private JMenu helpMenu; 
String line; 
//create a file chooser 
private JFileChooser fc; 
BufferedReader br; 
//create a text area 
JTextArea ta = new JTextArea(); 

//constructors 
public ClassChooser 
{ 
    //create scroll pane 
    JScrollPane scrollPane = new JScrollPane(ta); 

    ta.setText("Enter text to see scroll bars."); 
    //create a panel 
    JPanel content = new JPanel(); 
    content.setLayout(new BorderLayout()); 
    content.add(scrollPane, BorderLayout.CENTER); 

    //call functions to create drop down menu's 
    createFileMenu(); 
    createEditMenu(); 
    createHelpMenu(); 

    //create menu bar and add drop down menu's 
    JMenuBar menuBar = new JMenuBar(); 
    this.setJMenuBar(menuBar); 
    menuBar.add(fileMenu); 
    menuBar.add(editMenu); 
    menuBar.add(helpMenu); 


    this.setContentPane(content); 
    this.setTitle("File Chooser"); 
    this.setVisible(true); 
    this.setSize(600,250); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 

public void createFileMenu() 
{ 
    JMenuItem item; 

    fileMenu = new JMenu("File"); 

    item = new JMenuItem("New"); 
    item.addActionListener(this); 
    fileMenu.add(item); 

    item = new JMenuItem("Open"); 
    item.addActionListener(new OpenListener()); 
    fileMenu.add(item); 

    item = new JMenuItem("Save"); 
    item.addActionListener(this); 
    fileMenu.add(item); 

    item = new JMenuItem("Rename"); 
    item.addActionListener(this); 
    fileMenu.add(item); 

    item = new JMenuItem("Delete"); 
    item.addActionListener(this); 
    fileMenu.add(item); 

    item = new JMenuItem("Make Directory"); 
    item.addActionListener(this); 
    fileMenu.add(item); 
    fileMenu.addSeparator(); 

    item = new JMenuItem("Exit"); 
    item.addActionListener(this); 
    fileMenu.add(item); 

} 
public void createEditMenu() 
{ 
    JMenuItem item; 

    editMenu = new JMenu("Edit"); 

    item = new JMenuItem("Cut"); 
    item.addActionListener(this); 
    editMenu.add(item); 

    item = new JMenuItem("Copy"); 
    item.addActionListener(this); 
    editMenu.add(item); 

    item = new JMenuItem("Paste"); 
    item.addActionListener(this); 
    editMenu.add(item); 

} 
public void createHelpMenu() 
{ 
    JMenuItem item; 

    helpMenu = new JMenu("Help"); 

    item = new JMenuItem("Welcome"); 
    item.addActionListener(this); 
    helpMenu.add(item); 

    item = new JMenuItem("Help Contents"); 
    item.addActionListener(this); 
    helpMenu.add(item); 
} 

private class OpenListener implements ActionListener 
{ 
public void actionPerformed(ActionEvent e) 
{  
     fc = new JFileChooser(); 
     // directories only to be selected 
     fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 
     fc.setSelectedFile(fc.getCurrentDirectory()); 
     fc.setDialogTitle("Directory Chooser"); 
     fc.setMultiSelectionEnabled(false); 

     int retVal = fc.showOpenDialog(ClassChooser.this); 
     //File file; 

     if(retVal == fc.APPROVE_OPTION) 
     { 
     file = fc.getSelectedFile(); 

     try { 
      br = new BufferedReader(new FileReader(file)); 
     } catch (FileNotFoundException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     try { 
      line = br.readLine(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     while(line != null) 
     { 
      ta.append(line + "\n"); 
      try { 
       line = br.readLine(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 
     } 

    } 
} 

public static void main(String[] args) 
{ 
    ClassChooser fce = new ClassChooser; 
     String filename = File.separator + "tmp"; 

} 

public void actionPerformed(ActionEvent e) 
{ 
// TODO Auto-generated method stub 
String menuName; 

    menuName = e.getActionCommand(); 

    if(menuName.equals("Exit")) 
    { 
    System.exit(0); 
    } 
else 
    { 
    response.setText("Menu Item '" + menuName + "' is selected."); 
    } 
} 

} 

답변

3

코드가 실제로 파일을 열고 있지만 이전에로드 한 파일의 내용을 지우지 않고 텍스트 영역에 추가하고 있습니다.

OpenListener 클래스 actionPerformed 메서드에서 첫 번째 문으로 ta.setText("")을 추가하고 파일 내용로드를 계속합니다.

코드 : 당신의 응답을

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

public class ClassChooser extends JFrame implements ActionListener { 
    // create a label 
    private JLabel   response; 
    File     file; 
    // menu tabs 
    private JMenu   fileMenu; 
    private JMenu   editMenu; 
    private JMenu   helpMenu; 
    String     line; 
    // create a file chooser 
    private JFileChooser fc = null; 
    BufferedReader   br; 
    // create a text area 
    JTextArea    ta = new JTextArea(); 
    private String currentFileBeingEdited = null; 
    // constructors 
    public ClassChooser() { 
     // create scroll pane 
     JScrollPane scrollPane = new JScrollPane(ta); 
     ta.setText("Enter text to see scroll bars."); 
     // create a panel 
     JPanel content = new JPanel(); 
     content.setLayout(new BorderLayout()); 
     content.add(scrollPane, BorderLayout.CENTER); 
     // call functions to create drop down menu's 
     createFileMenu(); 
     createEditMenu(); 
     createHelpMenu(); 
     // create menu bar and add drop down menu's 
     JMenuBar menuBar = new JMenuBar(); 
     this.setJMenuBar(menuBar); 
     menuBar.add(fileMenu); 
     menuBar.add(editMenu); 
     menuBar.add(helpMenu); 
     this.setContentPane(content); 
     this.setTitle("File Chooser"); 
     this.setVisible(true); 
     this.setSize(600, 250); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public void createFileMenu() { 
     JMenuItem item; 
     fileMenu = new JMenu("File"); 
     item = new JMenuItem("New"); 
     item.addActionListener(this); 
     fileMenu.add(item); 
     item = new JMenuItem("Open"); 
     item.addActionListener(new OpenListener()); 
     fileMenu.add(item); 
     item = new JMenuItem("Save"); 
     item.addActionListener(this); 
     fileMenu.add(item); 
     item = new JMenuItem("Rename"); 
     item.addActionListener(this); 
     fileMenu.add(item); 
     item = new JMenuItem("Delete"); 
     item.addActionListener(this); 
     fileMenu.add(item); 
     item = new JMenuItem("Make Directory"); 
     item.addActionListener(this); 
     fileMenu.add(item); 
     fileMenu.addSeparator(); 
     item = new JMenuItem("Exit"); 
     item.addActionListener(this); 
     fileMenu.add(item); 
} 

public void createEditMenu() { 
     JMenuItem item; 
     editMenu = new JMenu("Edit"); 
     item = new JMenuItem("Cut"); 
     item.addActionListener(this); 
     editMenu.add(item); 
     item = new JMenuItem("Copy"); 
     item.addActionListener(this); 
     editMenu.add(item); 
     item = new JMenuItem("Paste"); 
     item.addActionListener(this); 
     editMenu.add(item); 
} 

public void createHelpMenu() { 
    JMenuItem item; 
    helpMenu = new JMenu("Help"); 
    item = new JMenuItem("Welcome"); 
    item.addActionListener(this); 
    helpMenu.add(item); 
    item = new JMenuItem("Help Contents"); 
    item.addActionListener(this); 
    helpMenu.add(item); 
    } 

private class OpenListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     //ADDED ONLY THIS LINE 
     ta.setText(""); 
     fc = new JFileChooser(); 
     // directories only to be selected 
     fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 
     fc.setSelectedFile(fc.getCurrentDirectory()); 
     fc.setDialogTitle("Directory Chooser"); 
     fc.setMultiSelectionEnabled(false); 

     int retVal = fc.showOpenDialog(ClassChooser.this); 
     // File file; 

     if (retVal == fc.APPROVE_OPTION) { 
      file = fc.getSelectedFile(); 
      currentFileBeingEdited = file.getAbsolutePath(); 
      try { 
       br = new BufferedReader(new FileReader(file)); 
      } catch (FileNotFoundException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      try { 
       line = br.readLine(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      while (line != null) { 
       ta.append(line + "\n"); 
       try { 
        line = br.readLine(); 
       } catch (IOException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
      } 
     } 

    } 
} 

public static void main(String[] args) { 
    ClassChooser fce = new ClassChooser(); 
    String filename = File.separator + "tmp"; 

} 

public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
    String menuName; 

    menuName = e.getActionCommand(); 

    if (menuName.equals("Exit")) { 
     System.exit(0); 
    } else if("Save".equalsIgnoreCase(menuName)){ 
     PrintWriter pw = null; 
     try { 
      pw = new PrintWriter(new File(currentFileBeingEdited)); 
      pw.println(ta.getText()); 
     } catch (FileNotFoundException e1) { 
      e1.printStackTrace(); 
     } finally { 
      if(pw != null){ 
       pw.close(); 
      } 
     } 

    } else { 
     response.setText("Menu Item '" + menuName + "' is selected."); 
    } 
} 

} 
+0

감사합니다. 내 코드가 실제로 파일을 열었다 고 말하면 JTextArea에서이 코드를 볼 수 있습니까? 나는 아닙니다. Eclipse를 사용하고 있습니다. actionPerformed 이벤트의 시작 부분에 제안을 추가했지만 기존 텍스트는 지우지 만 파일은 여전히 ​​JTextArea를 채우지 않습니다. getText (선)을 어딘가에 삽입해야한다고 생각했지만 아무리 노력해도 좋았습니다. 나는 또한 System.out.println을 던지고 라인을 넘겨 봤지만 그 중 하나를 채웠다. 추가 제안 사항이 있으십니까? – doug

+0

그래, 텍스트 영역에서 파일 내용을 선택하는 것을보고 있는데 한 줄을 추가했다. ta.setText (""); actionPerformed에서 전체 코드로 내 대답을 편집했습니다. 도움이되는지 살펴 봅니다. – mprabhat

+0

고맙습니다. 다른 파일을 열어 보았는데 작동했습니다. FileReader 바로 다음에있는 FileReader와 동일한 actionPerformed에서 FileWrite를 코딩 할 수 있는지 알고 있습니까? FileReader로 연 파일을 변경하고 저장할 수 있습니까? 또는 SaveListener와 같은 새 ActionListener를 만들어 저장 드롭 다운 메뉴 옵션과 연결해야합니까? – doug

관련 문제