#file write#file read#파일읽고쓰기#파일쓰기
String fileName = "D:/sample.txt";
Stream<String> stream = Files.lines(Paths.get(fileName), Charset.forName("UTF-8"));
stream.forEach(System.out::println);
//stream.collect(Collectors.toList()).forEach(System.out::println);
//stream.parallel().forEach(System.out::println); // 병렬처리시
//stream.parallel().forEachOrdered(System.out::println); // 병렬처리시 순서보장
stream.close();
※ 위와 동일 try{} 자동해제
Path path = Paths.get("D:/sample.txt");
try (Stream<String> stream = Files.lines(path)) {
stream.forEach(System.out::println);
}
String fileName = "D:/sample.txt";
BufferedReader reader = Files.newBufferedReader(Paths.get(fileName), Charset.forName("UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
Path path=Paths.get("D:/sample.txt ");
try(BufferedReader reader=Files.newBufferedReader(path)) {
reader.lines().forEach(System.out::println);
}
String fileName = "D:/sample.txt";
List<String> lines = Files.readAllLines(Paths.get(fileName), Charset.forName("UTF-8"));
lines.forEach(System.out::println);
String fileName = "D:/sample.txt";
byte[] bytes = Files.readAllBytes(Paths.get(fileName));
System.out.println(new String(bytes));
String fileName = "D:/sample.txt";
try (Scanner scan = new Scanner(new File(fileName))) {
while (scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
}
※ char 를 체크할때 사용가능하다.
String fileName = "D:/sample.txt";
File file = new File(fileName);
FileReader filereader = new FileReader(file);
int _ch = 0;
while((_ch = filereader.read()) != -1){
System.out.print((char)_ch);
// if( (char)_ch == '\r' ) { ... ... } // 필요시 문자체크
}
filereader.close();
File file = new File("D:/sample.txt");
// new FileWriter(file, true) :
// [ 옵션 ]
// default 는 false 이고
// true 설정시 append로 기존 파일내용에 이어쓰기한다.
try (BufferedWriter bufwr = new BufferedWriter(new FileWriter(file, true))) {
bufwr.write("한줄을 추가한다.");
bufwr.newLine(); // 개행문자 입력
bufwr.write("또 한줄을 추가한다.");
} catch (IOException e) {
e.printStackTrace();
}
File file = new File("D:/sample.txt");
// FileWriter Options : true(append), default(false:삭제후 쓰기)
try(PrintWriter _pw = new PrintWriter(new FileWriter(file, true))) {
_pw.print("한줄을 입력한다.");
_pw.println();
_pw.write("새롭게 입력한다.\n");
_pw.println("또 한줄을 입력한다.");
_pw.printf("포메팅 : %s %d \n", "정수입력", 1234);
} catch (IOException e) {
e.printStackTrace();
}
※ byte 단위로 파일을 쓰기 때문에 이미지 파일등 row byte를 파일에 쓸때 적합하다.
File file = new File("D:/sample.txt");
// byte 단위로 파일을 쓰기 때문에 이미지 파일등 row byte를 파일에 쓸때 적합하다.
try (FileOutputStream _fos = new FileOutputStream(file)) {
_fos.write("한줄을 입력한다.\n".getBytes());
_fos.write("또 한줄을 입력한다.".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
File file = new File("d:\\sample.txt");
try (DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file, true)))) {
dos.writeUTF("안녕하세요 다함께 써용\n");
dos.writeInt(200000);
} catch (IOException e) {
e.printStackTrace();
}
String path = "D:/";
Stream<Path> dir = Files.list(Paths.get(path));
dir.forEach(System.out::println);
dir.close();
String path = "D:/";
try(Stream<Path> dir = Files.list(Paths.get(path))) {
dir.forEach(System.out::println);
}
String path = "D:/";
DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(path));
stream.forEach(System.out::println);
stream.close();
String path = "D:/data";
recv(Paths.get(path));
public static void recv(Path path) throws IOException {
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
for (Path entry : stream) {
if (Files.isDirectory(entry)) {
System.out.println("DIR : " + entry); // 메소드 부르기전 처리해야 순서대로 처리됨
recv(entry);
} else {
System.out.println("FILE : " + entry);
}
}
}
}
반환값의 종류
CONTINUE | 계속진행한다. |
TERMINATE | 이후 검색을 종료한다. 특정 파일을 찾고 끝낼경우 이값을 리턴하면 된다. |
SKIP_SUBTREE | 하위 디렉토리 검색을 하지 않는다. |
SKIP_SIBLINGS | 형제 파일들을 검색하지 않는다. |
※ 필요한 메소드만 상속받아 처리하면 된다.
String fileName = "D:/";
Path path = Paths.get(fileName);
try {
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
/**
* 파일에 접근했을때
*/
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("FILE : " + file);
return FileVisitResult.CONTINUE;
}
/**
* 디렉토리에 접근했을때
*/
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("▶DIR : " + dir);
return FileVisitResult.CONTINUE;
}
/**
* 파일접근에 실패했을때
*
* 디폴트는 리턴은 예외를 발생시키고 정지한다.
* return FileVisitResult.CONTINUE; - 예외를 throws하지 않고 지속한다.
*/
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
System.out.println("■ERROR : " + file);
return FileVisitResult.CONTINUE;
}
/**
* 디렉토리에 접근 후 떠날때
*/
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println("◀DIR : " + dir);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}