2014-03-13 4 views
0

잘 작동하는 텍스트 파일에서 일부 줄을 삭제하지만 빈 줄에 문제가 있습니다. .txt 파일에있는 사람들은 여전히 ​​그 파일을 제거하거나 넣는 방법을 모르지만 Google과 여기에 대한 해결책을 찾았지만 실패했습니다. 어떻게 빈 줄을 제거 할 수 있을지 생각해보십시오. 나는 그것을 시도 :Java txt 파일의 빈 줄 삭제

public static String COMMENT_LINE = "--.*"; 
    public static String CREATE_BUFFERPOOL = "CREATE BUFFERPOOL.*"; 
    public static String GRANT_USE = "GRANT USE.*"; 
    public static String CONNECT_TO = "CONNECT TO.*"; 
    public static Logger log = Logger.getLogger(Main.class); 



    //CHANGE PATH 
    public static String INPUT_FILE_PATH = "C://Users//dpa//Desktop//BW//bwcsvtest.txt"; 
    public static String OUTPUT_FILE_PATH "C://Users//dpa//Desktop//BW//BWFormated.txt"; 
    public static String TRANSFORM_FILE_PATH = "C://Users//dpa//Desktop//BW//BWtransformed.txt"; 
    public static String CSV_FILE_PATH = "C://Users//dpa//Desktop//BW//result.csv"; 

    public static void main(String[] args) throws IOException { 
     //log.debug("Formating File"); 
     formatTxt(INPUT_FILE_PATH,OUTPUT_FILE_PATH); 
     log.debug("Formating File complete"); 
     //CsvTransformer csvTransformer = new CsvTransformer(OUTPUT_FILE_PATH,TRANSFORM_FILE_PATH); 
     //csvTransformer.parseCSVInput(); 
     //csvTransformer.writeDataToCsv(CSV_FILE_PATH); 

    } 

    public static void formatTxt(String inputFilePath, String outputFilePath) throws IOException { 
     File inputFile = new File(inputFilePath); 
     BufferedReader reader = new BufferedReader(new FileReader(inputFile)); 

     File tempFile = new File(outputFilePath); 
     BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); 
     String currentLine; 
     while ((currentLine = reader.readLine()) != null) { 
      currentLine = currentLine.trim(); 
      if (currentLine.matches(COMMENT_LINE)) { 
       log.debug(currentLine); 
       log.debug("Commentline deleted"); 
       continue; 
      } 
      if (currentLine.matches(CREATE_BUFFERPOOL)) { 
       log.debug(currentLine); 
       log.debug("CREATE BUFFERPOOL deleted"); 
       continue; 
      } 
      if (currentLine.matches(GRANT_USE)) { 
       log.debug(currentLine); 
       log.debug("GRANT USE deleted"); 
       continue; 
      } 
      if (currentLine.matches(CONNECT_TO)) { 
       log.debug(currentLine); 
       log.debug("CONNECT TO deleted"); 
       continue;   
      } 

      writer.write(currentLine.replace("\t", "")); 
      writer.newLine(); 

     } 
     reader.close(); 
     writer.close(); 


    } 

} 
+0

첫째,이 경우 '사용하는 것이 좋습니다 것입니다/'if'를'formatTxt' 메소드에서 사용합니다. 코드가 작성되면 매번 동일한 문자열을 비효율적으로 재검사하므로 어떤 행인지 식별하면 안됩니다. 둘째, 나는 당신이 그 선을 제거하려고하는 것을 보지 못한다. 라인이 비어있어 다른 if 블록처럼 아무것도하지 않는다면 테스트 한'formatTxt'에서'if'를 기대할 것입니다. – CodeChimp

+0

@CodeChimp "코드 된대로"-> 각'if '블록의 끝에'continue;'가 있습니다. 그래서 다시 테스트하지 않습니다. – fge

+0

여러분의 권리는 일찍 왔고, 보통은 사용하지 않습니다. '계속하기 '때문에 등록되지 않았습니다. 그러나, 나는 여전히 빈 문자열에 대한 테스트를 볼 것으로 예상됩니다. – CodeChimp

답변

2

왜 추가하지

currentLine.trim().length() == 0); but still with out success 

탱크, 단지 currentLine = currentLine.trim(); 후,이 코드 :

if (currentLine.isEmpty()) 
    continue; 
0
currentLine = currentLine.trim(); 
if (!currentLine .equals("")) // don't write out blank lines 
    { 
     writer.write(currentLine , 0, currentLine .length()); 
    } 
관련 문제