【发布时间】:2023-03-14 08:33:02
【问题描述】:
我有一个项目应该读取文件中的代码行,检测这些代码行,然后让用户选择删除代码(如果存在)。
但是,我的代码遇到了一些问题。它无法删除文件,但出现以下错误:
该进程无法访问该文件,因为它正被另一个进程使用。
这是我的代码:
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import java.awt.Desktop;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.BufferedReader;
import javax.swing.JOptionPane;
import java.nio.file.*;
class mtd_Scan_Files{
public static void main(String[] args)
{
try{
double count = 0, countBuffer=0,countLine=0;
Scanner scan = new Scanner(System.in);
File virusfile2 = new File("F:\\Users\\Matthew\\virusfile2.txt");
String name = "virusfile2.txt";
BufferedReader br;
boolean exists2 = virusfile2.exists();
Scanner filereader = new Scanner(virusfile2);
String maliciouscode = "deletesystem32";
String maliciouscode2 = "downloadmoreram";
String maliciouscode3 = "helloworld";
String line = "";
int x = 0;
int y = 0;
int z = 0; //These three integers are flag variables used to indicate if the malicious code exists
try{
if(exists2 || virusfile2.exists()){
try{
br = new BufferedReader(new FileReader(virusfile2));
try{
while((line = br.readLine()) != null){
countLine++;
String[] numberlines = line.split(" ");
for(String word : numberlines){
if(word.equals(maliciouscode)){
x++; //Increase the flag variable by one for every time the maliciouscode is found in the document
}
else if(word.equals(maliciouscode2)){
y++;//Increase the flag variable by one for every time the maliciouscode2 is found in the document
}
else if(word.equals(maliciouscode3)){
z++;//Increase the flag variable by one for every time the maliciouscode3 is found in the document
}
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
catch(Exception e){
e.printStackTrace();
}
}
else{
JOptionPane.showMessageDialog(null, "virusfile2 does not exist on this computer", "Java Antivirus - DOES NOT EXIST!",
JOptionPane.INFORMATION_MESSAGE);
}
}
catch(Exception e){
e.printStackTrace();
}
if(x == 0 && y == 0 && z == 0){
JOptionPane.showMessageDialog(null, "This file is clean of malicious code", "Java Antivirus - CLEAN!",
JOptionPane.INFORMATION_MESSAGE);
}
else{
int m = JOptionPane.showConfirmDialog(null,
"virusfile2.txt contains the following malicious phrases:\n deletesystem32: " + x + "\n downloadmoreram: " + y + "\n hellowworld: " + z + "\n Do you want Java Antivirus to remove it?",
"Java Antivirus - WARNING!", JOptionPane.YES_NO_OPTION);
if(m == 0){
try{
virusfile2.delete();
Path malwarepath = Paths.get("F:\\Users\\Matthew\\virusfile2.txt");
Files.delete(malwarepath);
JOptionPane.showMessageDialog(null, "Virus file was removed!", "Java Antivirus - REMOVED!",
JOptionPane.INFORMATION_MESSAGE);
}
catch(Exception e){
e.printStackTrace();
}
}
else{
JOptionPane.showMessageDialog(null, "Virus file was not removed!", "Java Antivirus - NOT REMOVED!",
JOptionPane.INFORMATION_MESSAGE);
}
}
}
catch(FileNotFoundException e){
JOptionPane.showMessageDialog(null, "virusfile2 does not exist on this computer", "Java Antivirus - DOES NOT EXIST!",
JOptionPane.INFORMATION_MESSAGE);
}
}
}
【问题讨论】:
-
这个错误非常简单,不知道你还希望我们告诉你什么:
The process cannot access the file because it is being used by another process.也就是说,已经有另一个程序打开了文件。 -
那么如何更改我的代码以停止我的 virusfile2.txt 上的 BufferedReader 进程?
-
在尝试删除文件之前,关闭
BufferedReader对象,您可以通过在其对象上调用.close()方法来执行此操作,在您的情况下为br。 -
那行不通。我试着把 br.close();在初始化 BufferedReader 的 try 语句结束时,我仍然收到错误。
标签: java file process bufferedreader filesystemexception