Как удалить целую строку из текстового файла из введенного ввода - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь удалить целую строку после ввода названия ассоциации, но не работает.он продолжает показывать ошибку, не может удалить исходный входной файл, не могли бы вы помочь мне с этим?

String inputFileName = "Association Record.txt";
String outputFileName = "Association Report.txt";
String lineToRemove = JOptionPane.showInputDialog("Enter Association Name to Delete the Record");

try{
          File inputFile = new File(inputFileName);
          File outputFile = new File(outputFileName);

          try{
                  BufferedReader r1= new BufferedReader(new FileReader(inputFile));
                  BufferedWriter w1 = new BufferedWriter(new FileWriter(outputFile));   
                  String line = null;
                                while ((line = r1.readLine()) != null) {
                                        if (!line.equals(lineToRemove)) {
                                            w1.write(line);
                                            w1.newLine();
                                        }
                                }//end while
           }
                    catch (IOException ex) {ex.printStackTrace();}  
                    if (inputFile.delete()) {
                            if (!outputFile.renameTo(inputFile))
                                            throw new IOException("Could not rename " + outputFileName + " to " + inputFileName);
                            }
                    else {throw new IOException("Could not delete original input file " + inputFileName);}      
                }
                catch (Exception e){System.out.println(e.getMessage());}
}

пример одной строки в файле: КОМПЬЮТЕР, ПК, 08/07/2018, brandon

* КОМПЬЮТЕР - это название ассоциации

1 Ответ

0 голосов
/ 07 декабря 2018

Если слово КОМПЬЮТЕР является словом ассоциации, а строка, которую вы хотите удалить , начинается с слова КОМПЬЮТЕР , то String # равно () Метод не тот, который следует использовать в вашем выражении IF .Вам может понадобиться метод String # startWith () , например:

boolean ignoreLetterCase = true;  // ignore Letter Case by default
String lineToRemove = "computer";
String criteria = ignoreLetterCase ? lineToRemove.toLowerCase() : lineToRemove;

while ((line = r1.readLine()) != null) {
    String procString = ignoreLetterCase ? line.toLowerCase : line;
    if (!procString.startsWith(criteria)) {
        w1.write(line);
        w1.newLine();
    }
}

Строка данных файла COMPUTER,pc,08/07/2018,brandon не будет записана в файл назначения.

Если, однако, вы хотите игнорировать строку файла, в которой содержит ассоциативное слово COMPUTER где угодно в строке извлеченных данных, тогда вызахочет использовать метод String # contains () , например:

boolean ignoreLetterCase = true;  // ignore Letter Case by default
String lineToRemove = "computer";
String criteria = ignoreLetterCase ? lineToRemove.toLowerCase() : lineToRemove;

while ((line = r1.readLine()) != null) {
    String procString = ignoreLetterCase ? line.toLowerCase : line;
    if (!procString.contains(criteria)) {
        w1.write(line);
        w1.newLine();
    }
}

Строка данных файла COMPUTER,pc,08/07/2018,brandon будет не записана в место назначенияфайл.Однако строка данных файла, которая содержит PRINTER,pc-computer,09/27/2018,joseph, будет также не записываться в файл назначения, поскольку слово computer содержится в исходной строке файла.

IСильно сомневаюсь, что это когда-либо будет иметь место с вашим файлом данных, но если строка данных восстановленного файла only содержит ассоциативное слово (COMPUTER), то во всех случаях вы захотите использовать String # equals () или String # equalsIgnoreCase () метод.

Если вы хотите игнорировать строки исходного файла, где ассоциативное слово относится только к определенному столбцу данных любой строки данных извлеченного файлатогда вы захотите проанализировать (разбить) каждую строку в массиве столбчатых данных и выполнить сравнение по нужному столбцу (элементный индекс массива).Например:

// Delete all file lines where the NAME column equals 
// the name 'brandon' or 'Brandon' or 'BRANDON'.

boolean ignoreLetterCase = true;  // ignore Letter Case by default  
int deleteIfInColumn = 3;
String nameToDelete = "Brandon"; 
String criteria = ignoreLetterCase ? nameToDelete .toLowerCase() : nameToDelete;

while ((line = r1.readLine()) != null) {
    String procString = ignoreLetterCase ? line.toLowerCase : line;
    String[] columnData = procString.split(",");
    if (columnData[deleteIfInColumn].equals(criteria)) {
        continue;  // Skip to next file line
    }
    w1.write(line);
    w1.newLine();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...