JAVA

JFileChooser이용해서 파일 열기 , 파일 저장하기, 다른 이름으로 저장하기 ( ActionCommand로 수정해볼 예정)

소힌 2022. 1. 25. 22:28
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class FileOpener extends JFrame {
	File selected;

	public FileOpener() {
		super("FileChooser");

		JPanel textpnl = new JPanel();
		JTextArea jta = new JTextArea(30, 30);
		JScrollPane scrl = new JScrollPane(jta);
		scrl.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		// JScrollpane을 등록하면 jta는 같이 첨부되는 개념
		JPanel btnpnl = new JPanel();
		JButton open = new JButton("파일 열기");
		JButton save = new JButton("파일 저장");
		JButton saveAs = new JButton("다른 이름으로 저장하기");

		textpnl.add(scrl);
		btnpnl.add(open);
		btnpnl.add(save);
		btnpnl.add(saveAs);

		add(btnpnl, "North");
		add(textpnl, "Center");
		pack();
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		ActionListener li = new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				Object o = e.getSource();
				if (o == open) {
					JFileChooser chooser = new JFileChooser();
					chooser.setCurrentDirectory(new File("c:\\aaaa\\"));
					chooser.showOpenDialog(getParent());
					selected = chooser.getSelectedFile();
					StringBuilder sb = readFileAneGetText(selected);
					jta.setText(sb.toString());
				} else if (o == save) {
					String save = jta.getText();
					// 입력하는 메소드 만들기
					saveTheFileText(save, selected);

				} else if (o == saveAs) {
					JFileChooser chooser = new JFileChooser();
					chooser.setCurrentDirectory(new File("c:\\aaaa\\"));
					chooser.showSaveDialog(getParent());
					selected = chooser.getSelectedFile();
					String text = jta.getText();
					saveTheFileText(text, selected);

				}

			}
		};

		open.addActionListener(li);
		save.addActionListener(li);
		saveAs.addActionListener(li);
	}

	public StringBuilder readFileAneGetText(File file) {
		setTitle(selected.getName());
		StringBuilder sb = new StringBuilder();
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			String string;
			while ((string = br.readLine()) != null) {
				sb.append(string);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sb;
	}

	public void saveTheFileText(String string, File file) {
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(file));
			bw.write(string);
			bw.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

일단 기능 구현은 해놓았고 중복되는 것이 있으면 따로 메소드로 만들 예정임