我试图在输入关联名称后删除整行,但是不起作用。它一直显示错误,无法删除原始输入文件,您能帮我吗?
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());}
}
文件中一行的示例: 计算机,pc,2018年8月7日,布兰登
* COMPUTER是关联名称
答案 0 :(得分:0)
如果单词 COMPUTER 是关联词,而您要删除的行以 COMPUTER 开头,则字符串#equals()方法不是您的 IF 语句中使用的方法。您可能要使用String#startsWith()方法,例如:
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
将不会写入目标文件。
但是,如果您想忽略包含关联词计算机 任何地方 的文件行数据行,那么您将需要利用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 。
我非常怀疑您的数据文件是否会出现这种情况,但是如果检索到的文件数据行仅 包含关联词(COMPUTER),那么您绝对想使用{{ 3}}或String#equals()方法。
如果您想忽略原始文件行,其中仅在任何检索到的文件数据行的特定数据列中关联单词,那么您希望将每一行解析(分割)为一个列数据数组,然后进行比较所需的列(数组元素索引)。例如:
// 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();
}