Как закрыть открытый файл в java

Я пытаюсь написать файл excel в java и сохранить его в общей папке. но если файл в настоящее время открыт кем-либо в любой системе, он выдает ошибку. Итак, есть ли способ закрыть файл excel с помощью команды java?


person Harshal Shah    schedule 20.08.2015    source источник
comment
outputStream.close();, если вы не хотите закрыть файл в другой программе.   -  person eric.m    schedule 20.08.2015
comment
Я пробовал это, но все равно выдает ошибку --›. (Процесс не может получить доступ к файлу, поскольку он используется другим процессом)   -  person Harshal Shah    schedule 20.08.2015
comment
Первое, что нужно установить, это какой процесс открыл файл? Java, excel, что-то еще? Вы знаете, в каком процессе он открыт?   -  person tombrown52    schedule 20.08.2015
comment
Я также рекомендую вам проверить, открыт ли файл другим процессом, с помощью этого: stackoverflow.com/a/9341572/3779214   -  person eric.m    schedule 20.08.2015
comment
@tombrown52, просто чтобы проверить свое приложение, я держу его открытым в своей системе, как обычный файл Excel, в то время я выдавал такую ​​​​ошибку.   -  person Harshal Shah    schedule 20.08.2015
comment
Я считаю, что Excel по умолчанию открывает файлы для эксклюзивной записи (см. здесь). Хотя вы можете настроить рабочую книгу Excel для совместного использования несколькими пользователями, я почти уверен, что это режим для нескольких читателей и однократной записи; Я не знаю, как иметь двух одновременных писателей. Посмотрите на ранее процитированную ссылку для решения, которое ожидает выхода из Excel, прежде чем записывать ваши изменения.   -  person Rusty Shackleford    schedule 20.08.2015


Ответы (3)


Если файл на самом деле открыт в чьем-то окне (например, вы открываете документ MS Word), то закрыть файл на их компьютере из программы Java будет невозможно. Если вам просто нужно однократно обновить этот файл, я бы рекомендовал создать другой файл с другим именем, а затем вручную заменить содержимое нужного места назначения содержимым файла, который вы создаете программно.

person Everyone_Else    schedule 20.08.2015
comment
Если вы сами открыли файл, его сложно принудительно закрыть. Но если вы предоставляете общий доступ к файлу, и он открыт кто-то еще, вы можете закрыть его с помощью команды net files <id> /close (где <id> — это идентификатор указанного файла, отображаемый при запуске net files без каких-либо аргументов) - person tombrown52; 20.08.2015
comment
Я собираюсь отредактировать свой ответ в связи с этим, но, пожалуйста, дайте мне знать, если этого недостаточно. - person Everyone_Else; 20.08.2015

Как удалить/закрыть открытый файл excel. поэтому вы должны автоматически закрыть файл перед удалением...

    final File file=new File("E:\\book1.xlsx");
    Runtime.getRuntime().exec(
            "cmd /c taskkill /f /im excel.exe");

    new Thread(new Runnable() {

        @Override
        public void run() {

            try {
                   Thread.currentThread().sleep(2000);// you need to wait 1-2 sec to close file before delete
                   file.delete();   

               } catch (InterruptedException e) {

                e.printStackTrace();
            } 
        }
    }).start();
person Vijay patil    schedule 06.09.2015
comment
Пробовал этот подход, и он работал для меня - person T-coder; 05.06.2018

В зависимости от того, как файл открыт, вы можете выполнить команду net files <id> /close через Runtime.exec(). Вы также можете комбинировать команду psexec для закрытия файлов на удаленных компьютерах.

Этот ответ, похоже, описывает аналогичную ситуацию, вам просто нужно заставить java запускать команды: https://superuser.com/questions/643916/remotely-close-open-shared-files

person tombrown52    schedule 20.08.2015