목차 | |
1. | File |
1. 실습
▣ File01
package day10;
import java.io.IOException;
public class File01 {
public static void main(String[] args) {
// file : java.io.* 에서 제공하는 클래ㅑ스들은 try~catch / throws를 해줘야함
// Input / OutputStream (IOStream) : 단방향으로 데이터가 흘러가는 형태
/* java는 입력스트림, 출력스트림을 통해 데이터를 입출력함.
* 다양한 장치에 독립적으로 운영, 일관성있게 입출력을 유지하기 위해
* 입출력 스트림을 통해 일관성, 독립성 제고
*
* 두 가지 형태의 스트림
* - 바이트 형태의 스트림 : 기본(문자, 그림, 멀티미디어)
* - 문자 형태의 스트림 : 문자만 입쳑할 때 사용
*
* 1. 바이트 스트림
* - 입력(InputSteam) : FileInputStream, BufferedInputStram, DataInputStream...
* - 출력(OutputSream) : FileOLutputStream, BufferedOutputSteam, DataOutputStream...
* 2. 문자 스트림
* - 입력(Reader) : FileReader, BufferedReader, InputStramReader...
* - 출력(Writer) : FileWriter, BufferedWriter, PrintWriter...
*
* 기반스트림 / 보조스트림
* 기반스트림 : 직접 자료를 읽고 쓰는 기능이 있는 스트림
* - FileINputStream, FileOutputStream, FileReader, FileWriter
* 보조스트림 : 직접 읽고 쓰는 기능은 없지만, 추가적인 기능을 더해주기위한 스트림
* - Buffered~
*/
// 표준 출력(모니터=콘솔) 스트림
System.out.println("print");
// 표준 입력(키보드) 스트림
try {
// 바이트 단위 스트림
int b = System.in.read();
System.out.println("Read() > " + (char)b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 표준 에러 출력 스트림
System.err.println("error");
}
}
▷ 출력
▣ File02
package day10;
import java.io.IOException;
public class File02 {
public static void main(String[] args) {
// System.in을 이용하여 알파벳 받기
// Enter를 인식 == '\n'
System.out.println("알파벳 입력 > ");
try {
int in;
while((in = System.in.read()) != '\n') { // Enter가 아니면 출력X
System.out.println((char)in);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
▷ 출력
▣ File01
package day10;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class File03 {
public static void main(String[] args) throws IOException {
// FileWriter를 통해 파일 쓰기
// 다시 실행하면 같은 이름의 파일로 덮어쓰기
FileWriter fw = new FileWriter("D:\\writer.txt");
for(int i=1; i<=10; i++) {
// \r=캐리지리턴, \n=enter
String data = i+" test \r\n";
fw.write(data); //파일에 기록
fw.write("my project I/O Test \r\n");
}
fw.close();
//기존 파일에 데이터를 쓰려고 할 때 : 추가모드
FileWriter fw2 = new FileWriter("writer.txt", true);
for(int i=11; i<=20; i++) {
// \r=캐리지리턴, \n=enter
String data = i+" test \r\n";
fw2.write(data); //파일에 기록
fw2.write("my project I/O Test \r\n");
}
fw2.close();
//PrintWriter
PrintWriter pw = new PrintWriter("writer2.txt");
for(int i=1; i<=10; i++) {
String data = i+ " PrintWriter Test. \r\n";
pw.write(data);
}
pw.close();
//파일에 내용을 추가하려면...
PrintWriter pw2 = new PrintWriter(new FileWriter("writer2.txt", true));
for(int i=11; i<=20; i++) {
String data = i+ " append mode. \r\n";
pw2.write(data);
}
pw2.close();
//바이트기반 스트림
//fileOutputStream을 이용한 파일 쓰기
FileOutputStream output = new FileOutputStream("out.txt");
for(int i=1; i<=10; i++) {
String data = i+". 한글로 써보기 Test \r\n";
//바이트 기반 스트림이기 때문에 바이트 단위로 쓰기
output.write(data.getBytes());
}
output.close();
}
}
▷ 출력
- writer
1test
my project I/O Test
2test
my project I/O Test
3test
my project I/O Test
4test
my project I/O Test
5test
my project I/O Test
6test
my project I/O Test
7test
my project I/O Test
8test
my project I/O Test
9test
my project I/O Test
10test
my project I/O Test
11test
my project I/O Test
12test
my project I/O Test
13test
my project I/O Test
14test
my project I/O Test
15test
my project I/O Test
16test
my project I/O Test
17test
my project I/O Test
18test
my project I/O Test
19test
my project I/O Test
20test
my project I/O Test
11 test
my project I/O Test
12 test
my project I/O Test
13 test
my project I/O Test
14 test
my project I/O Test
15 test
my project I/O Test
16 test
my project I/O Test
17 test
my project I/O Test
18 test
my project I/O Test
19 test
my project I/O Test
20 test
my project I/O Test
11 test
my project I/O Test
12 test
my project I/O Test
13 test
my project I/O Test
14 test
my project I/O Test
15 test
my project I/O Test
16 test
my project I/O Test
17 test
my project I/O Test
18 test
my project I/O Test
19 test
my project I/O Test
20 test
my project I/O Test
- writer2
1 PrintWriter Test.
2 PrintWriter Test.
3 PrintWriter Test.
4 PrintWriter Test.
5 PrintWriter Test.
6 PrintWriter Test.
7 PrintWriter Test.
8 PrintWriter Test.
9 PrintWriter Test.
10 PrintWriter Test.
11 append mode.
12 append mode.
13 append mode.
14 append mode.
15 append mode.
16 append mode.
17 append mode.
18 append mode.
19 append mode.
20 append mode.
▣ File04
package day10;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class File04 {
public static void main(String[] args) throws IOException {
// 파일 읽기
// BufferedReader : 문자 보조스트림
/* 라인단위로 읽기 가능
* 더 이상 읽을 라인이 없다면(null을 리턴) 그만.
* 보조스트림 : 직접 읽고 쓰는 기능이 없기 때문에
* 기반 스트림을 매개변수로 포함해야 함.
*/
BufferedReader br = new BufferedReader(new FileReader("out.txt"));
while(true) {
String line = br.readLine(); // 한 라인으로 읽어오기
if(line == null) {
break;
}
System.out.println(line);
}
br.close();
}
}
▷ 출력
1. 한글로 써보기 Test
2. 한글로 써보기 Test
3. 한글로 써보기 Test
4. 한글로 써보기 Test
5. 한글로 써보기 Test
6. 한글로 써보기 Test
7. 한글로 써보기 Test
8. 한글로 써보기 Test
9. 한글로 써보기 Test
10. 한글로 써보기 Test
▣ File05
package day10;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
public class File05 {
public static void main(String[] args) throws IOException {
// test.txt 파일을 읽어들여 map에 저장
// 명단, 합계, 평균 출력
// 읽어 들이는 파일은 모두 String
// 계산을 위해서는 int로 변환이 필요
// Integer.parseInt();
// 80점 이상인 학생 명단
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
HashMap<String, Integer> map = new HashMap<>();
int sum = 0;
while(true) {
String line = br.readLine();
if(line == null) {
break;
}
// name, score로 분리
// 홍길동 78 공백을 기준으로 분리 substring
String name = line.substring(0, line.indexOf(" "));
int score = Integer.parseInt(line.substring(line.indexOf(" ") + 1));
sum += score;
map.put(name, score);
}
System.out.println(map);
System.out.println("-------------");
for(String name : map.keySet()) {
System.out.println(name + ":" +map.get(name));
}
System.out.println("합계 : " + sum + " / 평균 : " +((double)sum /map.size()));
System.out.println("-------------");
System.out.println("-80점 이상 명단-");
for(String name : map.keySet()) {
if(map.get(name) >= 80) {
System.out.println(name + ":" + map.get(name));
}
}
br.close();
}
}
▣ test
홍길동 78
강감찬 89
김순이 45
박영이 69
이순신 96
박철수 85
김승찬 87
▷ 출력
▣ File06
package day10;
import java.io.File;
public class File06 {
public static void main(String[] args) {
// File 객체 : 경로 + 확장자
// D:\gunhee_240904\java_workspace\java_project\test.txt
// 파일 생성
// File.separator : 파일 경로 구분자(운영체제마다 다름) \\ ( \ / )
// txt, xml, json, csv
// 데이터 센터 => xml json(가장 많이 사용)
File f = new File("D:\\gunhee_240904\\java_workspace\\java_project\\test.txt");
System.out.println(File.separator);
String name = f.getName();
System.out.println(name); // 파일명, 확장자
System.out.println(f.getPath()); // 경로 + 파일명 + 확장자
System.out.println(f.getParent()); // only 경로
// 파일 객체를 스트링으로 변환
String f2 = f.toString();
System.out.println(f2);
String f2Name = f2.substring(f2.lastIndexOf(File.separator)+1);
System.out.println(f2Name);
}
}
▷ 출력
▣ Word
package day10;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class Word {
private String word;
private List<String> mean = new ArrayList<>();
public Word() {}
public Word(String word) {
this.word = word;
}
public Word(String word, List<String> mean) {
this.word = word;
this.mean = mean;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public List<String> getMean() {
return mean;
}
public void setMean(List<String> mean) {
this.mean = mean;
}
@Override
public String toString() {
return word + " : " + mean;
}
@Override
public int hashCode() {
return Objects.hash(mean, word);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Word other = (Word) obj;
return Objects.equals(word, other.word);
}
}
▣ WordController
package day10;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class WordController {
private List<Word> wordBook = new ArrayList<>();
public void addWord() {
//기존 단어 추가
Word w = new Word("dog");
List<String> tmp = new ArrayList<>();
tmp.add("강아지");
tmp.add("뽀삐");
tmp.add("개");
w.setMean(tmp);
wordBook.add(w);
Word w1 = new Word("cat");
List<String> tmp1 = new ArrayList<>();
tmp1.add("고양이");
tmp1.add("나비");
tmp1.add("야옹이");
w1.setMean(tmp1);
wordBook.add(w1);
Word w2 = new Word("pig");
List<String> tmp2 = new ArrayList<>();
tmp2.add("돼지");
tmp2.add("꿀꿀이");
tmp2.add("저팔계");
w2.setMean(tmp2);
wordBook.add(w2);
}
public void insertWord(Scanner scan) {
// 단어등록
System.out.println("단어:");
String word = scan.next();
List<String> tmp = new ArrayList<>();
String end = "a";
while(!end.equals("y")) {
System.out.println("의미:");
tmp.add(scan.next());
System.out.println("종료(y)");
end = scan.next();
}
wordBook.add(new Word(word,tmp));
System.out.println("등록완료");
}
public void searchWord(Scanner scan) {
// 단어검색
System.out.println("검색할 단어입력 >");
String word = scan.next();
int index = wordBook.indexOf(new Word(word));
System.out.println(wordBook.get(index));
}
public void modifyWord(Scanner scan) {
// 단어수정
System.out.println("수정할 단어입력 >");
String word = scan.next();
int index = wordBook.indexOf(new Word(word));
List<String> mean = wordBook.get(index).getMean();
System.out.println(mean);
System.out.println("몇번째 뜻을 수정할까요?(1,2,3..)");
int i = scan.nextInt();
System.out.println("수정의미 > ");
String modify = scan.next();
mean.set(i-1, modify);
wordBook.set(index, new Word(word, mean));
System.out.println("수정완료");
}
public void printWord() {
// wordBook 출력
for(Word w : wordBook) {
System.out.println(w);
}
}
public void removeWord(Scanner scan) {
// 단어삭제
System.out.println("삭제할 단어입력 >");
String word = scan.next();
wordBook.remove(new Word(word));
System.out.println("삭제완료");
}
public void fileWord() throws IOException {
// 파일로 출력
// StringBuffer 객체 사용
// .append : 기존 String 객체에 데이터 추가
FileWriter fs = new FileWriter("word.txt");
BufferedWriter bw = new BufferedWriter(fs);
StringBuffer sb = new StringBuffer();
String data = null;
sb.append("--단어장--\r\n");
for(Word w : wordBook) {
sb.append(w);
sb.append("\r\n"); //줄바꿈
}
data = sb.toString();
System.out.println(data);
bw.write(data);
bw.close();
fs.close();
}
}
▣ WordMain
package day10;
import java.io.IOException;
import java.util.Scanner;
public class WordMain {
public static void main(String[] args) {
/* 단어장 프로그램
* 1.단어등록|2.단어검색|3.단어수정|4.단어출력|5.단어삭제|6.단어파일로출력|7.종료
* Word class 생성
* - 단어, 뜻 (List<String>)
*
* Word (equals 사용) : 단어가 같으면 같은 객체
* */
Scanner scan = new Scanner(System.in);
WordController wc = new WordController();
wc.addWord();
int menu = -1;
do {
System.out.println("1.단어등록|2.단어검색|3.단어수정|4.단어출력|5.단어삭제|6.파일출력|7.종료");
System.out.println("menu>");
menu = scan.nextInt();
switch(menu) {
case 1: wc.insertWord(scan); break;
case 2: wc.searchWord(scan); break;
case 3: wc.modifyWord(scan); break;
case 4: wc.printWord(); break;
case 5: wc.removeWord(scan); break;
case 6: try {
wc.fileWord();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} break;
case 7: System.out.println("종료"); break;
default:
System.out.println("잘못된 메뉴입니다.");
}
}while(menu != 6);
scan.close();
}
}
▣ word
--단어장--
dog : [댕댕이, 뽀삐, 개]
cat : [고양이, 나비, 야옹이]
pig : [돼지, 꿀꿀이, 저팔계]
▷ 출력
'Java' 카테고리의 다른 글
Java 기초(실습)- AWS 풀스택 과정 57일차 (0) | 2024.10.16 |
---|---|
Java 기초(Thread, Singleton, DB 연결)- AWS 풀스택 과정 56일차 (0) | 2024.10.15 |
Java 기초(Generics, lambda)- AWS 풀스택 과정 54일차 (0) | 2024.10.11 |
Java 기초(map)- AWS 풀스택 과정 53일차 (4) | 2024.10.10 |
Java 기초(polymorphism)- AWS 풀스택 과정 52일차 (10) | 2024.10.08 |