1

我有一个项目应该读取文件中的代码行,检测这些代码行,然后为用户提供删除代码(如果存在)的选项。

但是,我的代码遇到了一些问题。它无法删除该文件,但会出现以下错误:

该进程无法访问该文件,因为它正被另一个进程使用。

这是我的代码:

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);
    }
   }
}  
4

2 回答 2

0

所以,我发现我使用了两种方法来打开文件:BufferedReader 和 Scanner 方法。我正在关闭 BufferedReader,但我没有关闭 Scanner。由于扫描仪一开始是不必要的,我只是删除了它。

于 2018-12-15T14:39:12.087 回答
0

如果文件是打开的,关闭它然后运行你的程序

于 2018-12-15T02:23:44.010 回答