是的,我已经搜索过通过比较和匹配来删除特定行的方法,但是我的情况与我搜索到的情况不同,并且发生了错误的操作。
此处的代码是按钮 btnRemove
的 actionPerformed
。它的作用是从表格中删除选定的单元格,并且还从文件 Activities.dat
但是,发生的情况是,代码将整个文件删除并留空,留下 1 个空行,而不仅仅是我想要删除的行。
btnRemove.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//Execute when button is pressed
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
if (row >= 0) {
if (column >=0) {
for(int i=0; i<5; i++)
{
table.setValueAt("", row, column);
}
}
}
File file1 = new File("Activities.dat");
try
{
BufferedWriter writer = new BufferedWriter(new FileWriter(file1));
BufferedReader reader = new BufferedReader(new FileReader(file1));
Object lineToRemove = table.getValueAt(row, column);
lineToRemove.toString();
System.out.print(lineToRemove);
String currentLine;
while((currentLine = reader.readLine()) != null)
{
// trim newline when comparing with lineToRemove
String trimmedLine = currentLine.trim();
Object lineToRemove = table.getValueAt(row, column);
lineToRemove.toString();
if(trimmedLine.equals(lineToRemove)) continue;
writer.write(currentLine);
}
writer.close();
}
catch (IOException ex)
{
Logger.getLogger(ActivityScreen.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
最佳答案
您正在 while
循环中创建重复的 lineToRemove
。如果将 line
的类型更改为 String
并分配 table.getValueAt(row, column).toString()
的值,效果也会更好code> 到它(并且之后不要更改它)。此外,您还需要在获取之前设置 [row
, column
] 的值。您将搜索 ""
(如果不是一个好主意,则什么也不搜索)。尝试做这样的事情:
btnRemove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Execute when button is pressed
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
if (row >= 0) {
if (column >= 0) {
File file1 = new File("Activities.dat");
File temp = new File(file1.getAbsolutePath() + ".tmp"); // temp file
PrintWriter writer = null;
BufferedReader reader = null;
try {
writer = new PrintWriter(new BufferedWriter(new FileWriter(temp)), false);
reader = new BufferedReader(new FileReader(file1));
String lineToRemove = table.getValueAt(row, column).toString();
System.out.print(lineToRemove);
String currentLine;
while ((currentLine = reader.readLine()) != null) {
// trim newline when comparing with lineToRemove
String trimmedLine = currentLine.trim();
if (trimmedLine.equals(lineToRemove))
continue;
writer.println(currentLine);
}
} catch (IOException ex) {
Logger.getLogger(ActivityScreen.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (reader != null)
reader.close();
if (writer != null) {
writer.flush();
writer.close();
file1.delete(); // delete the old one
temp.renameTo(file1); // make temp same as original
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
table.setValueAt("", row, column);
}
}
}
});
关于java - 通过按钮操作从文件中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362478/