자바 IO 스 트림 고전 연습 문제
192768 단어 자바
본 고 는 자바 IO 흐름 의 13 개의 전형 적 인 연습 문제 에 대해 해답 을 하고 그 안에 상세 한 사고 해석 이 있 으 며 문 제 를 풀 때 먼저 생각 을 쓰 고 프로 그래 밍 하 는 습관 을 기 르 는 것 이 좋 습 니 다.
연습 문제
(1) 컴퓨터 D 디스크 에 Hello World.txt 파일 을 만 들 고 파일 인지 디 렉 터 리 인지 판단 합 니 다.디 렉 터 리 IOTest 를 만 든 다음 Hello World.txt 를 IOTest 디 렉 터 리 로 이동 합 니 다.이 디 렉 터 리 에 있 는 파일 을 IOTest 로 옮 겨 다 니 기
(2) 임의의 디 렉 터 리 입력,파일 및 폴 더 목록,효과 보기
(3) 현재 프로젝트 의 모든 자바 파일 을 재 귀적 으로 보 여 줍 니 다.
(4)디스크 에서 파일 을 메모리 로 읽 고 콘 솔 로 인쇄 합 니 다.
(5) 프로그램 에"HelloJavaWorld 안녕 세계"를 써 서 운영 체제 파일 Hello.txt 파일 에 출력 합 니 다.
(6) 한 디 렉 터 리 에서 다른 디 렉 터 리 로 그림 을 복사 합 니 다.(PS:복사 입 니 다.이동 하 시 겠 습 니까?)
(7) 파일 calcCharNum.txt(첨부 파일 참조)의 알파벳'A'와'a'가 나타 나 는 총 횟수 를 통계 합 니 다.
(8)파일 calcCharNum.txt(첨부 파일 참조)의 각 자모 출현 횟수 를 통계 합 니 다.
A(8),B(16),C(10)...,a(12),b(10),c(3)...괄호 안에 문자 가 나타 나 는 횟수 를 나타 낸다.
(9)파일 calcCharNum 2.txt(첨부 파일 참조)의 각 자모 출현 횟수 를 통계 합 니 다.A(8),B(16),C(10)...,a(12),b(10),c(3).중(5),국(6),괄호 안의 대표 문자 출현 횟수;
(10) 무 작위 파일 흐름 클래스 RandomAccessFile 을 사용 하여 텍스트 파일 을 거꾸로 읽 습 니 다.
(11) Dos 의 type 명령 을 실행 하고 줄 번 호 를 추가 할 수 있 는 자바 프로그램 을 만 듭 니 다.
콘 솔 에 텍스트 파일 을 표시 하고 줄 마다 줄 번 호 를 추가 합 니 다.
(12)두 개의 폴 더 이름 을 입력 하고 A 폴 더 내용 을 모두 B 폴 더 로 복사 하여 다 중 스 레 드 로 조작 하도록 합 니 다.
(13)D 디스크 에 있 는 모든 파일 과 폴 더 이름 을 보고 이름 을 사용 하여 순서 가 올 라 가 고 폴 더 가 앞 에 있 고 폴 더 가 뒤에 있 으 며 파일 크기 가 정렬 되 어 있 습 니 다.
2.상세 한 문제 풀이 과정
(1)첫 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.xykj.lesson1;
import java.io.File;
import java.io.IOException;
public class Test1 {
/**
* 1. D HelloWorld.txt ,
* , IOTest,
* HelloWorld.txt IOTest ;
* IOTest
*
* :
* 1、 File createNewFile()
* 2、 isFile(), isDirectory
* 3、 :mkdirs()
* 4、 :renameTo
* 5、 :list() ,foreach
* */
public static void main(String[] args) {
// D HelloWorld.txt
File file=new File("D:","HelloWorld.txt");
// ,
boolean isCreate;
try {
isCreate = file.createNewFile();
if (isCreate) {
System.out.println(" !");
}else {
System.out.println(" ! ");
}
} catch (IOException e) {
System.out.println(" !");
}
// ,
if (file.isFile()) {
System.out.println(" ");
} else {
System.out.println(" ");
}
// IOTest
File file2=new File("D:/IOTest");
file2.mkdirs();
//HelloWorld.txt IOTest ? ?》
if (file.renameTo(file2)) {
System.out.println(" !");
} else {
System.out.println(" ");
}
// IOTest
String[] arr=file2.list();
for (String string : arr) {
System.out.println(string);
}
}
}
코드 필름
snippet_file_0.txt
//위 에서 파일 을 이동 할 때 파일 경로 와 파일 이름 을 표시 해 야 합 니 다.
위의 file.renameTo(file 2)를 다음 으로 변경 합 니 다.
file.renameTo(file2.getPath + "/" + file.getName());
틀 리 지 않 았 을 거 야.
(2)두 번 째 문제
1.먼저 FileUtile 도구 클래스 만 들 기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.xykj.lesson2;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
*
*
* */
public class FileUtils {
//
public static List getAllFiles(String dir){
// File
List< File >files=new ArrayList();
File file=new File(dir);
//
if (file.exists()&&file.isDirectory()) {
// !
longErgodic(file,files);// files
}
return files;
}
// , , , files
private static void longErgodic(File file, List files) {
//.listFiles()
// ( )
File[] fillArr=file.listFiles();
//
if (fillArr==null) {
// ,
return;
}
// , ( ),
for (File file2 : fillArr) {
//
files.add(file2);
// , ,
//
longErgodic(file2, files);
}
}
}
코드 필름
snippet_file_0.txt
2.주 방법 호출 클래스 를 다시 만 듭 니 다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.xykj.lesson2;
import java.io.File;
import java.util.List;
public class Test2 {
/**
* ,
*
* : FileUtils ,
* */
public static void main(String[] args) {
// D
Listlist=FileUtils.getAllFiles("D:");
//
for (File file : list) {
System.out.println(file);
}
}
}
코드 필름
snippet_file_0.txt
(3)세 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.xykj.lesson3;
import java.io.File;
import java.util.List;
import com.xykj.lesson2.FileUtils;
public class Test3 {
/**
* .java
* 2 , .java
* : .
* */
public static void main(String[] args) {
// .
Listlist=FileUtils.getAllFiles(".");
// .java
for (File file : list) {
if (file.toString().endsWith(".java")) {
System.out.println(file.getName());
}
}
}
}
코드 필름
snippet_file_0.txt
(4)네 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.xykj.lesson4;
import java.io.File;
import java.io.FileInputStream;
public class Tset4 {
/**
* ,
*
* :
* 1、 FileinputSteam
* 2、 StringBuffer,
* 3、 StringBuffer
* */
public static void main(String[] args) {
// D:
otePad\aa.txt
File file = new File("D:\
otePad\\aa.txt");
try {
//
FileInputStream fis = new FileInputStream(file);
int len = 0;
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
// StringBuffer
while ((len = fis.read(buf)) != -1) {
sb.append(new String(buf, 0, len));
}
// StringBuffer
System.out.println(sb);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
코드 필름
snippet_file_0.txt
(5)다섯 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.xykj.lesson5;
import java.io.File;
import java.io.FileOutputStream;
public class Test5 {
/**
* "HelloJavaWorld " Hello.txt
*
* : , FileOutputStream
* */
public static void main(String[] args) {
// D:/Hello.txt,
File file = new File("D:/Hello.txt");
try {
//
FileOutputStream fos = new FileOutputStream(file);
// String byte
fos.write("HelloJavaWorld ".getBytes());
fos.flush();//
fos.close();//
} catch (Exception e) {
e.printStackTrace();
}
}
}
코드 필름
snippet_file_0.txt
(6)여섯 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.xykj.lesson6;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Test6 {
/**
* , (PS: )
*
* :
* renameTo,
* :
* 1、
* 2、
* 3、
* 4、 ,
*
* @throws Exception
* */
public static void main(String[] args) {
// D mm.jpg D java
//
File fileFrom = new File("D:/mm.jpg");
//
File fileTo = new File("D:/java/mm.jpg");
// 1、
try {
if (!fileTo.createNewFile()) {
System.out.println(" !");
}
// 2、
FileInputStream fis = new FileInputStream(fileFrom);
FileOutputStream fos = new FileOutputStream(fileTo);
int len = 0;
byte[] buf = new byte[1024];
while ((len = fis.read(buf)) != -1) {
// 3、
fos.write(buf, 0, len);
}
//
fos.flush();
//
fis.close();
fos.close();
System.out.println(" !");
} catch (Exception e) {
e.printStackTrace();
}
}
}
코드 필름
snippet_file_0.txt
(7)일곱 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.xykj.lesson7;
import java.io.File;
import java.io.FileInputStream;
public class Test7 {
/**
* calcCharNum.txt( ) 'A' 'a'
*
* :
* FileInputStream
* ( ), A a , 1
* */
public static void main(String[] args) {
try {
//
File file = new File("D:/java/calcCharNum.txt");
//
FileInputStream fis = new FileInputStream(file);
int numA = 0;// A
int numa = 0;// a
int len = 0;//
while ((len=fis.read())!= -1) {
// a
if (new String((char)len+"").equals("a")) {
numa++;
}
// A
if (new String((char)len+"").equals("A")) {
numA++;
}
}
//
System.out.println("a :"+numa);
System.out.println("A :"+numA);
System.out.println("a A :"+(numA+numa));
fis.close();//
} catch (Exception e) {
e.printStackTrace();
}
}
}
코드 필름
snippet_file_0.txt
(8)여덟 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.xykj.lesson8;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class Test8 {
/**
* calcCharNum.txt( ) :
* A(8),B(16),C(10)...,a(12),b(10),c(3)...., ;
*
* :
* 1. ,
* 2. , HashMap:key-value
* 3. key value, key value 1
* */
public static void main(String[] args) {
//
File file = new File("D:/java/calcCharNum.txt");
try {
//
FileInputStream fis = new FileInputStream(file);
// HashMap key-value
HashMap map = new HashMap<>();
//
int len = 0;//
int count = 0;
while ((len = fis.read()) != -1) {
//
char c = (char) len;
// try catch map.get(c + ""), get
try {
// key value ,
// key , try catch
// key , value
count = map.get(c + "");
} catch (Exception e) {//
}
// key value 1
map.put(c + "", count + 1);
}
fis.close();
//
//
Iterator> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Entry entry = iterator.next();
System.out.print(entry.getKey() + "(" + entry.getValue()+ ") \t");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
코드 필름
snippet_file_0.txt
사실 이 문제 도 문자 흐름 으로 직접 읽 을 수 있다.
(9)아홉 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.xykj.lesson9;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class Test9 {
/**
* calcCharNum2.txt( ) :
* A(8),B(16),C(10)...,a(12),b(10),c(3).... (5), (6),
* ;
*
* :
* 1. ,
* 2. , HashMap:key-value
* 3. key value, key value 1
* */
public static void main(String[] args) {
//
File file = new File("D:/java/calcCharNum2.txt");
// HashMap key-value
HashMap map = new HashMap<>();
try {
//
FileReader fr = new FileReader(file);
//
int len = 0;
int count=0;//
while ((len = fr.read()) != -1) {
//
char c = (char) len;
try {
// key value ,
// key , try catch
// key , value
count = map.get(c + "");
} catch (Exception e) {//
}
// key value 1
map.put(c + "", count + 1);
}
//
Iterator> iterator = map.entrySet().iterator();
//
while (iterator.hasNext()) {
Entry entry = iterator.next();
System.out.print(entry.getKey() + "(" + entry.getValue()+ ") \t");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
코드 필름
snippet_file_0.txt
(10)열 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.xykj.lesson10;
import java.io.File;
import java.io.RandomAccessFile;
public class Test10 {
/**
* RandomAccessFile 。
*
* :
* RandomAccessFile seek
* ,
* */
public static void main(String[] args) {
//
File file = new File("D:/java/calcCharNum2.txt");
try {
RandomAccessFile raf = new RandomAccessFile(file, "r");
long length = raf.length();
StringBuffer sb = new StringBuffer();
while (length > 0) {
length--;
raf.seek(length);
int c = (char) raf.readByte();
// asc <=255,>=0, , .
if (c >= 0 && c <= 255) {
sb.append((char) c);
} else {
// asc ,
// 2 , length
length--;
raf.seek(length);
byte[] cc = new byte[2];
// cc
raf.readFully(cc);
sb.append(new String(cc));
}
}
System.out.println(sb);
raf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
코드 필름
snippet_file_0.txt
(11)열 한 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.xykj.lesson1;
import java.io.File;
import java.io.IOException;
public class Test1 {
/**
* 1. D HelloWorld.txt ,
* , IOTest,
* HelloWorld.txt IOTest ;
* IOTest
*
* :
* 1、 File createNewFile()
* 2、 isFile(), isDirectory
* 3、 :mkdirs()
* 4、 :renameTo
* 5、 :list() ,foreach
* */
public static void main(String[] args) {
// D HelloWorld.txt
File file=new File("D:","HelloWorld.txt");
// ,
boolean isCreate;
try {
isCreate = file.createNewFile();
if (isCreate) {
System.out.println(" !");
}else {
System.out.println(" ! ");
}
} catch (IOException e) {
System.out.println(" !");
}
// ,
if (file.isFile()) {
System.out.println(" ");
} else {
System.out.println(" ");
}
// IOTest
File file2=new File("D:/IOTest");
file2.mkdirs();
//HelloWorld.txt IOTest ? ?》
if (file.renameTo(file2)) {
System.out.println(" !");
} else {
System.out.println(" ");
}
// IOTest
String[] arr=file2.list();
for (String string : arr) {
System.out.println(string);
}
}
}
코드 필름
snippet_file_0.txt
(12)열 두 번 째 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.xykj.lesson12;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.xykj.lesson2.FileUtils;
public class Test12 {
/*
* , A B , 。
*
* :
* 1. , , ,
* 2. , ,
* 3. ,
* 4. \\ /,
*
* ,
* */
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println(" :");
String fromDir = scanner.next();//
System.out.println(" :");
String toDir = scanner.next();//
// File
File fromFile = new File(fromDir);
File toFile = new File(toDir);
//
new Thread(){
//
public void run() {
// ,
if (fromFile.isFile()) {
System.out.println(" ");
copy(fromFile, toFile);
} else {
//
// : ,
// : D:/java/jsp D:/java/jsp/js ,
// , ,
// , ,
// : ,
if (toDir.replace("/", "\\").toLowerCase()
.startsWith(fromDir.replace("/", "\\").toLowerCase())) {
return;
}
// ( )
// ( )
List list = FileUtils.getAllFiles(fromDir);
// ,
ExecutorService threadPool = Executors.newFixedThreadPool(20);
//
for (File file : list) {
//
String name = file.getAbsolutePath();
//
String toName = name.replace(fromFile.getParent(), toDir + "/");
System.out.println(name + " " + toName);
// ,
if (file.isDirectory()) {
new File(toName).mkdirs();
} else {
// ,
threadPool.execute(new Runnable() {
@Override
public void run() {
File copyFile = new File(toName);
//
copyFile.getParentFile().mkdirs();
//
copy(file, copyFile);
}
});
}
}
}
scanner.close();
};
}.start();//
}
//
public static void copy(File fromFile, File toFile) {
//
FileInputStream fis = null;
//
FileOutputStream fos = null;
try {
// File,
fis = new FileInputStream(fromFile);
// File,
fos = new FileOutputStream(toFile);
// ,
byte[] buf = new byte[1024];
// /
int len = 0;
//
while ((len = fis.read(buf)) != -1) {//
//
fos.write(buf, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
코드 필름
snippet_file_0.txt
(13)13 번 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.xykj.lesson13;
import java.io.File;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.xykj.lesson2.FileUtils;
public class Test13 {
/**
* D , ,
* , 。
*
* :
* 1. , ( , )
* 2. list Collections sort
* 3. : , ,
* , , !
* */
public static void main(String[] args) {
List list =FileUtils.getAllFiles("D:");
// :
Collections.sort(list, new Comparator() {
@Override
public int compare(File o1, File o2) {
return (o2.isDirectory()?1:-1)-(o1.isDirectory()?1:-1);
}
});
// :
Collections.sort(list, new Comparator() {
@Override
public int compare(File o1, File o2) {
return (o1.getName()).compareTo(o2.getName());
}
});
// :
Collections.sort(list, new Comparator() {
@Override
public int compare(File o1, File o2) {
return (int)(o1.length()-o2.length());
}
});
//
for (File file : list) {
//
System.out.println(file.getName());
}
}
}
코드 필름
snippet_file_0.txt
이상 은 이 문제 들 의 상세 한 문제 풀이 과정 입 니 다.물론 많은 문제 의 해결 방법 은 고정 적 이지 않 습 니 다.
그러나 기본 적 인 문제 풀이 방식 에 대해 서 는 알 아야 한다.지식 을 습득 하면,
파일 의 기본 동작,파일 을 읽 는 기본 방법,파일 을 쓰 는 기본 방법 은 모두 파악 해 야 한다.
그리고 바이트 흐름 의 읽 기와 문자 흐름 의 읽 기 방식 과 용도 도 구분 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.