Header Ads Widget

Responsive Advertisement

[java] 파일 읽기 / 쓰기/ 폴더 생성

특정 폴더에 있는 파일 리스트를 읽어와 
특정 문자열만 편집해서
output 폴더를 만들고  _del.txt 파일로 다시 저장한다.

ps / 
- IDE를 윈도우에서 사용할 경우
다시 저장한 파일의 내용을 리눅스에 가져가서 shell 등에서 사용하면
윈도우와 리눅스의 줄바꿈의 차이로 에러가 발생할 수 있다.
리눅스에서 사용하려면 newLine() 함수가 아닌 \n을 사용하면 된다.
- 에러 예시 > /bin/sh^M: bad interpreter: No such file or directory


----------------------------------------------------------------------------


# source code
# FileReadAndSave.java

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 특정 폴더에 있는 파일 리스트를 읽어와
 * 특정 문자열만 편집해서
 * output 폴더를 만들고  _del.txt 파일로 다시 저장한다.
 *
 * @author NDAY
 *
 */
public class FileReadAndSave {

public static void main(String[] args) {

String path = "D:\\aviBatch\\logs2";
File dirFile = new File(path);
File[] fileList = dirFile.listFiles();

FileReader fileReader = null;
BufferedReader bufReader = null;

File newFile = null;
BufferedWriter bufferedWriter = null;

for (File tempFile : fileList) {
if (tempFile.isFile()) {
String tempPath = tempFile.getParent();
String tempFileName = tempFile.getName();
//System.out.println("Path=" + tempPath+", FileName="+tempFileName);

try {
fileReader = new FileReader(tempFile);
bufReader = new BufferedReader(fileReader);
String line="";

// output 폴더 생성
String newFileDirPath = path + File.separator + "output";
File dir = new File(newFileDirPath);
if(!dir.exists()){
dir.mkdirs(); //디렉토리 생성 메서드
        }

// 새로 생성될 파일
newFile = new File(newFileDirPath+File.separator + tempFileName + "_del.txt");

bufferedWriter = new BufferedWriter(new FileWriter(newFile));
bufferedWriter.write( "#!/bin/sh" );
//bufferedWriter.newLine(); // 돌아가는 OS에 따라서 다른 문자가 찍히기때문에 리눅스용은 별도로 해줘야 한다.
bufferedWriter.write("\n"); // 리눅스는 \n 으로 줄바꿈

System.out.println("fileName="+newFile.getName());

while((line = bufReader.readLine()) != null ){

if(line.indexOf("cmdStr:rm") > -1){
//System.out.println(">> "+line.substring( line.indexOf("rm")) );

//bufferedWriter.newLine(); // 윈도우 -> \r\n
bufferedWriter.write("\n"); // 리눅스 -> \n
bufferedWriter.write( line.substring( line.indexOf("rm")) );

}
else{
//System.out.println(">> "+line);
}

}

bufReader.close();
fileReader.close();
bufferedWriter.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}
}
}

댓글 쓰기

0 댓글