입출력 스트림
: 응용 프로그램과 입출력 장치를 연결하는 소프트웨어 모듈, 버퍼를 통해 순차적으로 이루어짐 (FIFO)
입출력 스트림 종류
void PrintFile(String fileName) {
String line = null;
try {
// 입력 스트림
FileReader fileReader = new FileReader(fileName);
// 입력 스트림으로부터 문자를 읽을 때 버퍼링
BufferedReader bufferedReader = new BufferedReader(fileReader);
// 버퍼로부터 한 줄씩 읽기
while((line = bufferedReader.readLine()) != null) {
// 화면에 한 줄씩 출력
System.out.println(line);
}
// 버퍼 리더 닫기
bufferedReader.close();
} catch (IOException e) {
System.out.println("입출력 오류");
}
}
void CopyFile(String inputFile, String outputFile) {
final int BUFFER_SIZE = 4096;
int readLen;
try {
// 바이트 단위 입출력 스트림
InputStream inputStream = new FileInputStream(inputFile);
OutputStream outputStream = new FileOutputStream(outputFile);
//바이트 배열 버퍼 생성
byte[] buffer = new byte[BUFFER_SIZE];
// 파일을 읽어 버퍼에 담기
while ((readLen = inputStream.read(buffer)) != -1) {
// 버퍼의 내용을 파일에 쓰기
outputStream.write(buffer, 0, readLen);
}
// 입출력 스트림 닫기
inputStream.close();
outputStream.close();
} catch (IOException e) {
System.out.println("입출력 오류");
}
}
void FileSearchAll(String path) {
File directory = new File(path);
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isDirectory()) {
// 폴더인 경우 재귀호출을 통한 하위 폴더 파일 탐색
FileSearchAll(file.getPath());
} else {
System.out.println(file.getName());
}
}
}
1) INPUT 폴더 하위에 위치한 파일들의 파일명, 크기를 Console에 출력
static String rootPath = ".\\INPUT";
static void printFile(String path) {
File directory = new File(path);
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isDirectory()) {
printFile(file.getPath());
} else {
System.out.print(file.getPath());
System.out.print(": ");
System.out.println(file.length() + "bytes");
}
}
}
public static void main(String[] args) {
printFile(rootPath);
}
2) INPUT 폴더 하위에 위치한 파일 중 크기가 3Kbyte가 넘는 파일들은 OUTPUT 폴더로 복사
static void fileSearchAll(String path) {
File directory = new File(path);
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isDirectory()) {
fileSearchAll(file.getPath());
} else {
String partPath = path.substring(rootPath.length());
System.out.println("." + partPath + "\\" + file.getName());
if (file.length() > 3*1024) {
copyFile(partPath, file.getName());
}
}
}
}
static void copyFile(String partPath, String fileName) {
final int BUFFER_SIZE = 512;
int readLen;
try {
File destFolder = new File(".\\OUTPUT" + partPath);
if (!destFolder.exists()) {
destFolder.mkdirs();
}
InputStream is = new FileInputStream(".\\INPUT" + partPath + "\\" + fileName);
OutputStream os = new FileOutputStream(".\\OUTPUT" + partPath + "\\" + fileName);
byte[] buffer = new byte[BUFFER_SIZE];
while ((readLen = is.read(buffer)) != -1) {
os.write(buffer, 0, readLen);
}
is.close();
os.close();
} catch (IOException e) {
System.out.println("입출력 오류");
}
}
public static void main(String[] args) {
// printFile(rootPath);
fileSearchAll(rootPath);
}