Настольное приложение Java не может записать файл на диск C: \ - PullRequest
0 голосов
/ 22 ноября 2011

Я пытаюсь записать файл на диск C: \, но получаю исключение.

java.io.IOException: доступ запрещен.

Код:

public class Test {

    public static void main(String[] args) {
        try {
            StringBuilder sb = new StringBuilder(File.separator);
            sb.append("index.txt");
            // sb is "\\index.txt"
            File f = new File(sb.toString());
            boolean isCreated = f.createNewFile();
            System.out.println(isCreated);
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

На самом деле, я понял, у меня нет разрешения на запись файла, но я совершенно уверен, что это можно сделать как-нибудь.Если бы у меня был апплет, я бы просто получил разрешение, но здесь я не знаю, как это сделать.

Вероятное решение может заключаться в проверке, могу ли я написать файл там, но для проверкия мог бы сначала попытаться написать файл, а затем удалить его, чтобы проверить, можно ли туда записать файл, но я не нахожу это решение оптимальным способом.

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Самый простой способ проверить это использовать File.canWrite () .

Сказав это, похоже, что вы пишете в корень диска. В Windows это, вероятно, не очень хорошая идея, и вы можете рассмотреть возможность написания в другом месте, например. temp dir .

1 голос
/ 24 ноября 2011

Я написал метод, который переносит строку в каталог и проверяет, можете ли вы записать туда файл:

static boolean canWrite(String folderPath) {
    File file = new File(folderPath);
    String new_file = "HastaLaVistaBaby";
    if (file.isDirectory()) {
        try {
            new File(file + "\\" + new_file).createNewFile();
        } catch (IOException e) {
            return false;
        }
        new File(file + "\\" + new_file).delete();
        return true;
    } else {
        return false;

    }
}

Чтобы улучшить его, вы можете проверить, есть ли file.isFile () и получить родительский каталог и вызвать этот метод.

0 голосов
/ 22 ноября 2011

Эта строка должна быть:

 sb.append("C:\\index.txt");

Дополнительная обратная косая черта избегает обратной косой черты.

Если вы жестко закодировали имя файла, как я, или получили имя файла от пользователя, вам нужен полный путь и имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...