Stream을 가지고 동작
Java program에서 데이터를 외부로 내보내거나 외부에서 데이터를 읽어들이기위해 사용하는 데이터 연결 통로
1. Stream은 단방향
입력을 하기 위한 Stream( InputStream class )
출력을 하기 위한 Stream (OutputStream class )
위의 두마리는 기본 Stream이기 때문에 사용이 상당히 불편하다.
조금 편하게 사용하기 위해서 추가적인 Stream을 제공
InputStreamReader class
PrintWriter class
파일처리를 하려면 어떻게 해야 할까?
FileInputStram class
FileOutputStream Class
2. FIFO구조
먼저보낸 데이터가 먼저 도착하는 구조
3.Stram을 편하게 사용하기 위해서 Stream을 결합해서 사용할 수 있다.
package JavaIO;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Exam01_IOBasic {
public static void main(String[] args) {
// 도스창에서 한줄을 입력받아서 그대로 출력!!
// 우리한테 기본적으로 제공되는게 있다. 표준입력과 표준출력에 대한 stream이 기본적으로 제공된다.
// System.out=> 우리가 제공받은 모니터에 대한 출력 스트림
System.out.println("출력고고!!");
// System.in=> 우리가 제공받은 키보드에 대한 입력 스트림.
// 이게 사용하기가 너무 불편하다. 스트림을 결합해서 새로운 조금 더 나은 형태의 스트림을 이용
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
try {
String msg=br.readLine(); //입력대기
System.out.println("입력받은 데이터는: "+msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
메모장 만들기!
열기, 저장, 다른이름으로 저장 기능 구현
package JavaIO;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class Exam02_NotePad extends Application{
private TextArea textarea;
private File file;
// textarea에 하나의 문자열을 출력하는 용도.
private void printMsg(String msg) {
Platform.runLater(() -> {
textarea.appendText(msg + "\n");
});
}
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root = new BorderPane();
root.setPrefSize(700, 500);
textarea = new TextArea();
root.setCenter(textarea);
FlowPane bottom = new FlowPane();
bottom.setPrefSize(700, 50);
bottom.setPadding(new Insets(20, 20, 20, 20));
Button openFileBtn = new Button("파일 열기");
openFileBtn.setPrefSize(100, 30);
openFileBtn.setOnAction(event -> {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("원하는 파일을 선택하세요.");
// 선택한 파일에 대한 추상화 객체를 하나 획득.
file = fileChooser.showOpenDialog(primaryStage);
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = null;
while((line = br.readLine()) != null) {
printMsg(line);
}
// 내가 사용한 자원 해제.
br.close();
fr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
});
Button saveBtn = new Button("저장");
saveBtn.setPrefSize(100, 30);
saveBtn.setOnAction(event -> {
//지금 사용하고 있는 파링레 대한 stream을 열어서 데이터를 write
//a문자열을 출력하기 위해서 일반적으로 사용되는 stream
try{
PrintWriter pr=new PrintWriter(file);
pr.print(textarea.getText());//이 라인에서 쓰기 작업이 일어나지 않는다.
pr.flush(); //현재 stream이 가지고 있는 저장공간에 있는 데이터를 실제로 write한다.
pr.close(); //반드시 후속처리를 진행해야 한다.
Alert alert=new Alert(AlertType.INFORMATION);
alert.setContentText("파일 저장 성공!!");
alert.show();
}catch(FileNotFoundException e) {
e.printStackTrace();
}
});
Button saveAsBtn = new Button("다른 이름으로 저장");
saveAsBtn.setPrefSize(200, 30);
saveAsBtn.setOnAction(event -> {
FileChooser fileChooser=new FileChooser();
fileChooser.setTitle("다른 이름으로 저장");
File file=fileChooser.showSaveDialog(primaryStage);
try {
PrintWriter pr=new PrintWriter(file);
pr.print(textarea.getText());
pr.flush();
pr.close();
Alert alert=new Alert(AlertType.INFORMATION);
alert.setContentText("다른 이름으로 저장 성공!!");
alert.show();
}catch (FileNotFoundException e) {
e.printStackTrace();
// TODO: handle exception
}
});
bottom.getChildren().add(openFileBtn);
bottom.getChildren().add(saveBtn);
bottom.getChildren().add(saveAsBtn);
root.setBottom(bottom);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch();
}
}
'코딩 > JAVA' 카테고리의 다른 글
JAVA 겨울방학 9일차 (0) | 2018.01.08 |
---|---|
JAVA 겨울방학 7일차 (0) | 2018.01.04 |
JAVA 겨울방학 6일차 (0) | 2018.01.03 |
겨울방학 JAVA 4일차 (0) | 2017.12.29 |
겨울방학 JAVA 3일차 (0) | 2017.12.28 |