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.");
}
}
}
감사합니다. 내 코드가 실제로 파일을 열었다 고 말하면 JTextArea에서이 코드를 볼 수 있습니까? 나는 아닙니다. Eclipse를 사용하고 있습니다. actionPerformed 이벤트의 시작 부분에 제안을 추가했지만 기존 텍스트는 지우지 만 파일은 여전히 JTextArea를 채우지 않습니다. getText (선)을 어딘가에 삽입해야한다고 생각했지만 아무리 노력해도 좋았습니다. 나는 또한 System.out.println을 던지고 라인을 넘겨 봤지만 그 중 하나를 채웠다. 추가 제안 사항이 있으십니까? – doug
그래, 텍스트 영역에서 파일 내용을 선택하는 것을보고 있는데 한 줄을 추가했다. ta.setText (""); actionPerformed에서 전체 코드로 내 대답을 편집했습니다. 도움이되는지 살펴 봅니다. – mprabhat
고맙습니다. 다른 파일을 열어 보았는데 작동했습니다. FileReader 바로 다음에있는 FileReader와 동일한 actionPerformed에서 FileWrite를 코딩 할 수 있는지 알고 있습니까? FileReader로 연 파일을 변경하고 저장할 수 있습니까? 또는 SaveListener와 같은 새 ActionListener를 만들어 저장 드롭 다운 메뉴 옵션과 연결해야합니까? – doug