Cobalt
@Cobalt
Программист - этим все сказано

Почему не может скопировать файл?

Есть слудующий кусок кода.

final File myself = new File(new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile()).getParentFile(), "Consultant.jar");
    final File tmp = File.createTempFile("Chat", ".tmp");

    try(
    final ReadableByteChannel rbc = Channels.newChannel(new URL(url).openStream())
    )

    {
        try (final FileOutputStream fos = new FileOutputStream(tmp)) {
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            fos.flush();
        }
    }

    if(!tmp.renameTo(myself))

    {
        try {
            Files.move(tmp.toPath(), myself.toPath(), StandardCopyOption.REPLACE_EXISTING);
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("Cant rename tmp-download version '" + tmp.getAbsolutePath() + "' to exec-binary '" + myself.getAbsolutePath() + "'\r\n" + e.getMessage());

        }
    }


Но он почему-то не работает. Уже долгое время бьюсь над проблемой, но вижу только следующую ошибку:

java.lang.Exception: Cant rename tmp-download version 'C:\Users\Cobalt\AppData\Local\Temp\Chat6072918692286185513.tmp' to exec-binary 'C:\Program%20Files\Consultant\app\Consultant.jar’
  • Вопрос задан
  • 300 просмотров
Пригласить эксперта
Ответы на вопрос 3
poisonGreen
@poisonGreen
Копировать, а не перемещать дает?
Если дает, значит, скорее всего, какой-то процесс держит файл.
Если не дает, значит что-то с правами.
Ответ написан
Комментировать
@j_wayne
А оригинальное то исключение на stdout какое?
Навскидку - %20 вместо пробела не нравится.
Ответ написан
Комментировать
Cobalt
@Cobalt Автор вопроса
Программист - этим все сказано
Да в том-то и дело, что кроме этого, в лог ничего больше не пишеться
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы