【问题标题】:My Java program has a FileSystemException error我的 Java 程序出现 FileSystemException 错误
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 文件未打开。一切正常,直到它必须删除文件。它可以读取文件,然后显示 JOptionPane 消息,提醒他们注意恶意代码并询问他们是否要删除它们,但如果单击是,则会出现异常并且不会删除文件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2011-10-22
    相关资源
    最近更新 更多