1. Filesํด๋ž˜์Šค

ํŒŒ์ผ ํด๋ž˜์Šค

ํŒŒ์ผ ์ž‘์—…์„ ์œ„ํ•ด ๋งค๋„๋Ÿฌ์šด ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ธ java.nio.file.Files. ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ์ •์ ์ด๋ฉฐ Path ๊ฐœ์ฒด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฐฉ๋ฒ•๋งŒ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• ์„ค๋ช…
Path createFile(Path path)
๊ฒฝ๋กœ๊ฐ€ ์ธ ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.path
Path createDirectory(Path path)
์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
Path createDirectories(Path path)
์—ฌ๋Ÿฌ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
Path createTempFile(prefix, suffix)
์ž„์‹œ ํŒŒ์ผ ์ƒ์„ฑ
Path createTempDirectory(prefix)
์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
void delete(Path path)
๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
Path copy(Path src, Path dest)
ํŒŒ์ผ ๋ณต์‚ฌ
Path move(Path src, Path dest)
ํŒŒ์ผ ์ด๋™
boolean isDirectory(Path path)
๊ฒฝ๋กœ๊ฐ€ ํŒŒ์ผ์ด ์•„๋‹Œ ๋””๋ ‰ํ† ๋ฆฌ์ธ์ง€ ํ™•์ธ
boolean isRegularFile(Path path)
๊ฒฝ๋กœ๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ์ธ์ง€ ํ™•์ธ
boolean exists(Path path)
์ฃผ์–ด์ง„ ๊ฒฝ๋กœ์— ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
long size(Path path)
ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜
byte[] readAllBytes(Path path)
ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ์„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
String readString(Path path)
ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜
List<String> readAllLines(Path path)
ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ์„ ๋ฌธ์ž์—ด ๋ชฉ๋ก์œผ๋กœ ๋ฐ˜ํ™˜
Path write(Path path, byte[])
๋ฐ”์ดํŠธ ๋ฐฐ์—ด์„ ํŒŒ์ผ์— ์”๋‹ˆ๋‹ค.
Path writeString(Path path, String str)
๋ฌธ์ž์—ด์„ ํŒŒ์ผ์— ์”๋‹ˆ๋‹ค.
DirectoryStream<Path> newDirectoryStream(Path dir)
์ง€์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ(๋ฐ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ) ๋ชจ์Œ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ƒ์„ฑํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ž์‹ ์„ ์„ค๋“ํ•ด ๋ด…์‹œ๋‹ค.

์•”ํ˜ธ ๋ฉ”๋ชจ
Files.createFile(Path.of("c:\\readme.txt"));
ํŒŒ์ผ ์ƒ์„ฑ
Files.createDirectory(Path.of("c:\\test"));
๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3. ๋ณต์‚ฌ, ์ด๋™ ๋ฐ ์‚ญ์ œ

ํŒŒ์ผ ๋ณต์‚ฌ, ์ด๋™ ๋ฐ ์‚ญ์ œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋„ ์ ์šฉ๋˜์ง€๋งŒ ๋น„์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธ ๋ฉ”๋ชจ
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
ํŒŒ์ผ ๋ณต์‚ฌ
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
ํŒŒ์ผ ์ด๋™ ๋ฐ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
ํŒŒ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค

4. ํŒŒ์ผ์˜ ์ข…๋ฅ˜ ๋ฐ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ œ๊ณตํ•œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์„ ๋•Œ ํŒŒ์ผ์ธ์ง€ ๋””๋ ‰ํ† ๋ฆฌ์ธ์ง€ ์•Œ๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋Ÿฌํ•œ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๊นŒ?

์ด๋ฅผ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๊ธธ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•”ํ˜ธ ๋ฉ”๋ชจ
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. ํŒŒ์ผ ๋‚ด์šฉ ์ž‘์—…

๋งˆ์ง€๋ง‰์œผ๋กœ, ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์‰ฝ๊ฒŒ ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ผ๋ จ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

์•”ํ˜ธ ์„ค๋ช…
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๋ฌธ์ž์—ด ๋ชฉ๋ก์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ํ‘œ์‹œ


6. ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ

๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๋ฐฉ๋ฒ•์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ๊ณผ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

newDirectoryStream()์šฐ๋ฆฌ๋Š” ํŠน๋ณ„ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค DirectoryStream<Path>. ์ฃผ์–ด์ง„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ณต์ž(!)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ์Šต๋‹ˆ๋‹ค.

์•”ํ˜ธ ์„ค๋ช…
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


ํŒŒ์ผ ๋ชฉ๋ก์ด ์žˆ๋Š” ๊ฐœ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ
ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ฒด DirectoryStream<Path>์—๋Š” ๋‘ ๊ฐ€์ง€ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ˜๋ณต์ž๊ฐ€ ์žˆ์œผ๋ฉฐ for-each๋ฃจํ”„ ๋‚ด์—์„œ ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘˜์งธ, ์ด ๊ฐœ์ฒด๋Š” ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ด๋ฏ€๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ซํžˆ close()๊ฑฐ๋‚˜ ๋ธ”๋ก ๋‚ด์—์„œ ์‚ฌ์šฉ์„ ์„ ์–ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค try-with-resources.



7. Files.newInputStream๋ฐฉ๋ฒ•

Java 5๋ถ€ํ„ฐ FileInputStream๋ฐ FileOutputStreamํด๋ž˜์Šค๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋””์Šคํฌ์— ํŒŒ์ผ์ด ์ฆ‰์‹œ ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ ์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์˜ˆ์™ธ๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์ด๊ฒƒ์€ ์ตœ์„ ์˜ ๊ฒฐ์ •์ด ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ์ธ์‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค. java.nio.Files๋”ฐ๋ผ์„œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค .

๋‹ค์Œ์€ ํŒŒ์ผ ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ด์ „ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋น„๊ตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „์—
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
ํ›„์—
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

๊ทธ๋ฆฌ๊ณ  ๋น„์Šทํ•œ ๋Œ€์ฒดํ’ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค FileOutputStream.

์ „์—
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
ํ›„์—
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );