Как убить javaw.exe в Java во время выполнения

У меня есть Java-код, который генерирует выходной файл. Когда я хочу удалить этот выходной файл во время выполнения в этом коде Java, он не может быть удален. Например:

File file2= new File("D:\\eclipse-jee-mars-R-win32-x86_64\\eclipse\\output.txt");
    if(file2.delete()){
                System.out.println(file2.getName() + " is deleted!");
            }
            else{
                System.out.println("Delete operation is failed.");
            }

Этот код не работает. (В этом каталоге создается файл "output.txt", который можно увидеть в папке.)

На самом деле, когда я хочу удалить в папке Windows, он не может удалить, и это дает эту ошибку. Я переведу на английский.

Скриншот

Если я убью процесс "javaw.exe" в диспетчере задач, я могу удалить этот файл в папке. Мой вопрос в том, как я могу решить эту проблему? Я хочу убить "javaw.exe" во время выполнения в Java, чтобы этот файл можно было удалить. Как убить этот процесс "javaw.exe" во время выполнения в Java? Если я убью процесс "javaw.exe" во время выполнения в коде, я столкнусь с другой проблемой?

Как я генерирую этот выходной файл?

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.io.FileWriter;

public class code{

    public static void main(String[] args) {

        try (BufferedReader br = new BufferedReader(new FileReader(args[0])))
        {

            int lines = 0;
            while (br.readLine() != null) lines++; // to get text's number of lines 

            String sCurrentLine;
            BufferedReader br2 = new BufferedReader(new FileReader(args[0])); //to read and sort the text

            String[] array; //create a new array
            array = new String[lines];

            int i=0;
            while ((sCurrentLine = br2.readLine()) != null) {//fill array with text content
                array[i] = sCurrentLine;
                i++;
            }
            Arrays.sort(array); //sort array


            FileWriter fw = new FileWriter("output.txt");

            for (i = 0; i < array.length; i++) { //write content of the array to file
                fw.write(array[i] + "\n");
            }
            fw.close();


            System.out.println("Process is finished.");


        } catch (IOException e) {
            e.printStackTrace();
        } 

    }
}

Фактически, я разрабатываю веб-приложение, которое компилирует / исполняет Java-коды онлайн с использованием JSP. Я не разделял все части, потому что трудно понять, разделяю ли я все части своего кода. Этот код генерирует выходной файл, он принимает входной файл, сортирует и создает новый файл "output.txt". Я хочу, чтобы в моем JSP удалить этот файл, но он не может быть удален, потому что javaw.exe все еще работает.

Выходной файл создается в каталоге "D:\eclipse-jee-mars-R-win32-x86_64\eclipse", я не хочу объяснять детали, чтобы избежать путаницы.

1 ответ

Я решил свою проблему. Я забыл закрыть свой BufferedReader. В моей программе есть несколько методов перехода, которыми я не мог поделиться со всеми. Эти методы перехода касаются обработки файлов, и в какой-то момент я забываю закрыть BufferedReader, который я создал, в другом месте. После того, как я закрыл свой BufferedReader, я мог динамически удалить файл "output.txt" в другом месте. Я делюсь своим методом просмотра текста. Он используется для просмотра выходного файла в JSP Textarea.

public static String viewtext(String pathname) throws IOException{


         String a="";

         File f = new File(pathname);
         if(f.exists() && !f.isDirectory()) { 
             BufferedReader br = new BufferedReader(new FileReader(pathname));
              for (String line; (line = br.readLine()) != null;) {
                  a = a  +  line + "\n"  ;
                  }
              br.close(); //I added just this 
             return a;
         }
         else{
            // br.close(); //No need here, if there is no file no close is needed.
             return "Your file is not found!";
     }

}

Также нет необходимости убивать процесс javaw.exe.

Другие вопросы по тегам