자바 IO 스 트림 고전 연습 문제

192768 단어 자바
자바 IO 스 트림 고전 연습 문제
 
본 고 는 자바 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
 
이상 은 이 문제 들 의 상세 한 문제 풀이 과정 입 니 다.물론 많은 문제 의 해결 방법 은 고정 적 이지 않 습 니 다.
그러나 기본 적 인 문제 풀이 방식 에 대해 서 는 알 아야 한다.지식 을 습득 하면,
파일 의 기본 동작,파일 을 읽 는 기본 방법,파일 을 쓰 는 기본 방법 은 모두 파악 해 야 한다.
그리고 바이트 흐름 의 읽 기와 문자 흐름 의 읽 기 방식 과 용도 도 구분 해 야 합 니 다.

좋은 웹페이지 즐겨찾기