Как переместить / переименовать загруженный файл? - PullRequest
1 голос
/ 06 февраля 2012

Я следовал этому руководству для загрузки файла в мое приложение JSF2.Приложение работает нормально, но я недоволен одним аспектом.При перестройке запроса файл, отправленный по запросу, сохраняется где-то на диске.

Несмотря на то, что файл сохранен, мне нужно переименовать файл с именем, которое доступно после ввода управляемого компонента, содержащего метод действия.

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

private File uploadFile;
//...
try {
    BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
    BufferedReader br = new BufferedReader(new FileReader(uploadFile));

    String line = "";
    while ((line = br.readLine()) != null){
        bw.write(line);
    }
} catch (Exception e){}

Новый файл появится в нужном месте.но эта ошибка выдается при попытке открыть файл: "Неверный или неподдерживаемый файл PNG"

Это мои вопросы:

  1. Есть лилучший способ решить эту проблему?
  2. Является ли это решение лучшим способом загрузить изображение?Есть ли причина для сохранения файла перед бизнес-логикой, когда может потребоваться изменить размер изображения или желаемое имя еще не доступно.

LE: Я знаю, что-то не так этот урок , но я пытаюсь сделать это только mojarra .

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

В объект java.io.File уже встроен метод переименования, я был бы удивлен, если бы он не работал в вашей ситуации.

<b>public boolean renameTo(File dest)</b>

    <i>Renames the file denoted by this abstract pathname.</i>

    Many aspects of the behavior of this method are inherently platform-dependent: 
    The rename operation might not be able to move a file from one filesystem to 
    another, it might not be atomic, and it might not succeed if a file with the
    destination abstract pathname already exists. The return value should always
    be checked to make sure that the rename operation was successful.

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

2 голосов
/ 06 февраля 2012

Не используйте Reader и Writer при работе с бинарными файлами, такими как изображения. Используйте потоки: FileInputStream и FileOutputStream. И лучший вариант - использовать решение @Perception с методом renameTo.

Читатели читают файл, как если бы он состоял из символов (например, txt, свойства, файлы yaml). Файлы изображений не являются символами, они являются двоичными, и для этого вы должны использовать потоки.

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