2017-01-22 2 views
1

Так что я пытаюсь выполнить сканирование txt-файла для String, если найдено String, нужен новый txt-файл который будет создан, и напишите в нем String. String, имя txt-файла, подлежащего поиску, и txt-файл, который будет/может быть создан, будут все введены через командную строку.Сканировать текстовый файл для строки, если она найдена, создать новый txt-файл с этой строкой

public class FileOperations { 
 

 
    public static void main(String[] args) throws FileNotFoundException { 
 
    String searchTerm = args[0]; 
 
    String fileName1 = args[1]; 
 
    String fileName2 = args[2]; 
 
    File file = new File(fileName1); 
 
    Scanner scan = new Scanner(file); 
 

 
    while (scan.hasNextLine()) { 
 
     if (searchTerm != null) { 
 
     try { 
 
      BufferedWriter bw = null; 
 
      bw = Files.newBufferedWriter(Paths.get(fileName2), StandardOpenOption.CREATE, StandardOpenOption.APPEND); 
 
      bw.write(searchTerm); 
 
      bw.close(); 
 
     } catch (IOException ioe) { 
 
      ioe.printStackTrace(); 
 
     } 
 

 

 
     } 
 
     scan.nextLine(); 
 
    } 
 
    scan.close(); 
 
    } 
 
}

То, что я пытался сделать, это создать While-цикл, который сканирует исходный текстовый файл в строку, и если строка найдена создать текстовый файл и ввести эту строку в него ,

В настоящее время происходит сканирование исходного файла (я тестировал его с помощью System.out.println), но новый файл со строкой создается независимо от того, находится ли файл String в исходном txt-файле или нет ,

ответ

0

В принципе, вы только что использовали сканер неправильно. Вы должны сделать это таким образом:

String searchTerm = args[0]; 
String fileName1 = args[1]; 
String fileName2 = args[2]; 
File file = new File(fileName1); 

Scanner scan = new Scanner(file); 
if (searchTerm != null) { // don't even start if searchTerm is null 
    while (scan.hasNextLine()) { 
     String scanned = scan.nextLine(); // you need to use scan.nextLine() like this 
     if (scanned.contains(searchTerm)) { // check if scanned line contains the string you need 
      try { 
       BufferedWriter bw = Files.newBufferedWriter(Paths.get(fileName2)); 
       bw.write(searchTerm); 
       bw.close(); 
       break; // to stop looping when have already found the string 
      } catch (IOException ioe) { 
       ioe.printStackTrace(); 
      } 
     } 
    } 
} 
scan.close(); 
+0

Я действительно был 'Струнный отсканированные = scan.nextLine(); 'там в какой-то момент, я должен удалить его, при редактировании и не понял его. Большое вам спасибо за это, что сработало и имеет гораздо больше смысла! –

Смежные вопросы