Java FileDialog

2023. 2. 2. 11:11Java

프로젝트 내 src 내 javabasic 패키지 내 Ex6FileMemo.java

package javabasic;

import java.awt.Color;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

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

//간단한 파일 입출력

public class Ex6FileMemo extends JFrame implements ActionListener {

	JButton btnSave, btnOpen;
	String fileName;
	JTextArea area;

	public Ex6FileMemo(String title) {
		// TODO Auto-generated constructor stub
		super(title);
		this.setBounds(700, 100, 400, 400);// 시작위치x,y,크기 w,h
		// super로 해도 되고 this로 해도 됨 super는 조상
		// this로 해도 상속을 받아서 괜찮음
		// this.getContentPane().setBackground(Color.orange);//프레임위에 있는 패널의 색상 변경
		this.getContentPane().setBackground(new Color(211, 225, 208));// 프레임위에 있는 패널의 색상 변경
		this.setDesign();// 디자인 코드
		this.setVisible(true);// 보이게 하기
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 프로그램을 종료해주는 메서드
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object ob = e.getSource();
		if (ob == btnOpen)// 불러오기
		{
			FileDialog dlg = new FileDialog(this, "파일열기", FileDialog.LOAD);
			dlg.setVisible(true);
			if (dlg.getDirectory() != null)// 취소를 누르지 않은경우
			{
				fileName = dlg.getDirectory() + dlg.getFile();
				FileReader fr = null;
				BufferedReader br = null;
				try {
					fr = new FileReader(fileName);
					br = new BufferedReader(fr);
					// 현재 메모장의 내용 지우기
					area.setText("");
					while (true) {
//						한줄읽기
						String line = br.readLine();
						if (line == null || line.length() == 0)
							break;
//						area 에 추가
						area.append(line + "\n");
					}
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} finally {
					try {
						if (br != null)
							br.close();
						if (fr != null)
							fr.close();
					} catch (IOException e1) {
						// TODO: handle exception
					}
				}
			}
		} else if (ob == btnSave)// 저장하기
		{
			FileDialog dlg = new FileDialog(this, "파일저장", FileDialog.SAVE);
			dlg.setVisible(true);
//			취소 누르면 null 값 반환
			String dir = dlg.getDirectory();// 선택한 디렉토리
			String file = dlg.getFile();// 선택한 파일명
//			System.out.println(dir);//취소 누르면 null 값 출력
//			System.out.println(file);
			if (dir != null)// 취소를 누르지 않았을 경우에만 저장
			{
				fileName = dir + file;// 경로포함 파일명
//				저장할 내용
				String content = area.getText();
//				파일에 저장
				FileWriter fw = null;
				try {
					fw = new FileWriter(fileName);// 파일라이터 생성
//					내용 저장
					fw.write(content);
					area.setText(fileName + " 저장완료!!!");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} finally {
					try {
						fw.close();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}

			}
		}
	}

	public void setDesign() {
		this.setLayout(null);
		btnSave = new JButton("파일저장");
		btnSave.setBounds(50, 30, 100, 30);
		this.add(btnSave);

		btnOpen = new JButton("파일열기");
		btnOpen.setBounds(170, 30, 100, 30);
		this.add(btnOpen);

		area = new JTextArea();
		JScrollPane jsp = new JScrollPane(area);
		jsp.setBounds(10, 80, 350, 250);
//		area.setBounds(10, 100, 350, 250);
		this.add(jsp);// 스크롤이 필요한 컴포넌트 추가하는 방법

//		버튼이벤트 추가
		btnSave.addActionListener(this);
		btnOpen.addActionListener(this);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Ex6FileMemo("간단메모");
	}

}

'Java' 카테고리의 다른 글

Java JTextField  (1) 2023.02.02
Java getContentPane()  (0) 2023.02.02
Java setDefaultCloseOperation(int operation)  (1) 2023.02.02
Java JRadioButton  (0) 2023.02.01
Java Canvas  (0) 2023.02.01