2016-05-23 3 views
1

У меня есть массив байтов, я хочу создать файл изображения (bmp-файл) массива байтов. Я создаю папку изображений в src (мой путь - src/images/test.bmp). мой код находится ниже, вjava.io.FileNotFoundException: (Access is denied) преобразовать массив байтов в файл изображения

OutputStream stream = new FileOutputStream(file);

Я получаю ошибку. в чем моя проблема? Как я могу это решить?

public static void saveImage() { 
    String s="........................"; 
    byte[] dataCustImg = Base64.decode(s.getBytes()); 

    File file = new File("/images/test.bmp"); 
    if (file.exists()) { 
     file.delete(); 
    } 
    file = new File("/images/test.bmp"); 
    file.mkdirs(); 
    try { 
     OutputStream stream = new FileOutputStream(file); 

     stream.write(dataCustImg); 
     stream.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

Ошибка:

java.io.FileNotFoundException: \images\test.bmp (Access is denied) 
at java.io.FileOutputStream.open(Native Method) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at java.io.FileOutputStream.<init>(Unknown Source) 
+0

Я могу решить свою проблему с помощью этого http: // stackoverflow.com/questions/6142901/как создать-a-file-in-a-directory-in-java ссылку. но теперь я хочу знать, как решить мой код с ответом @EJP. Я имею в виду, как создать файл и назначить параметр fileoutputStream? – Fahim

ответ

2
File file = new File("/images/test.bmp"); 

OK.

if (file.exists()) { 
    file.delete(); 
} 

Резервный. Удалить. new FileOutputStream() создаст новый файл.

file = new File("/images/test.bmp"); 

Резервный. Удалить. Это уже File с этим именем.

file.mkdirs(); 

Проблема здесь. Изменение в

file.getParentFile().mkdirs(); 

Вы создаете каталог под названием "/images/test.bmp", а не просто обеспечить, чтобы "/images" существует. Это приведет к ошибке new FileOutputStream() с правами доступа, так как вы не можете перезаписать каталог с файлом.

try { 
    OutputStream stream = new FileOutputStream(file); 

Продолжайте. Обратите внимание, что сначала вам нужно удалить каталог "/images/test.bmp", вручную.

+0

Спасибо за ответ, но когда у меня есть папка с изображениями в пути src, теперь я хочу сохранить test.bmp в папке с изображениями, я должен создать файл с файлом File = new File («/ images /»), это правда? если да, то как можно сохранить в test.bmp? Как установить это в fileoutputstream? Извините, если мой английский плохой – Fahim

+0

, пожалуйста, ответьте на мои вопросы. Большое спасибо – Fahim

+0

Вам не нужно делать что-либо другое, что я сказал выше. Я ничего не говорил о 'new File ("/images ")'. Я не знаю, откуда у вас это, или какая часть моего ответа вы не понимаете. – EJP

0

Вот когда вы звоните MKDIR то он создает Test.bmp как каталог не как файл, так что вы должны сначала создать каталог, а затем вы можете создать файл , см. ниже код.

 File dir = new File("/images/"); 
     dir.mkdirs(); 
     file = new File("/images/test.bmp"); 
     file.createNewFile(); 
+0

Вызов 'createNewFile()' избыточен. 'new FileOutputStream()' будет делать это. – EJP

+0

@ EJP .. Да .. Вы правы. –

-1
public static void saveImage() { 
    String s="........................"; 
    byte[] dataCustImg = Base64.decode(s.getBytes()); 

    File file = new File("/images/test.bmp"); 
    if(!file.getParentFile().exists()) { 
     file.getParentFile().mkdirs(); 
    } 
    if(!file.exists()) { 
     try { 
     file.createNewFile(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
    // because stream.write(dataCustImg) will overwrite the file if the file has already existed. 
    try { 
     OutputStream stream = new FileOutputStream(file); 

     stream.write(dataCustImg); 
     stream.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
+0

Спасибо, но все же у меня такая же ошибка :( – Fahim

+0

@Fahim, я отредактировал код выше и протестировал его. Он работает на моем компьютере. Предложите использовать File.separator вместо «/» и «\». – kgym

+0

«существует()/createNewFile() '- полная и полная трата времени. Операционная система должна делать именно это, когда вызывается' new FileOutputStream() '. Вы заставляете это делать все дважды. родительский каталог бесполезен и расточителен, так как 'mkdirs()' уже делает это внутри ОС. – EJP

0

Причина исключения заключается в том, что вы на самом деле создать каталог с пути /images/test.bmp

file = new File("/images/test.bmp"); 
file.mkdirs(); 

, а затем вы хотите открыть файл

OutputStream stream = new FileOutputStream(file); 

Если вы должны убедиться, что существует каталог /images, прежде чем создавать файл Вы должны использовать

File dir = new File("/images/"); 
dir.mkdirs(); 

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

Найдите небольшой рабочий снимок ниже.

// create the directory if not exist 
File dir = new File("/images/"); 
dir.mkdirs(); 
// create a new file or overwrite an existing one 
File file = new File("/images/test.bmp"); 
try (OutputStream os = new FileOutputStream(file)) { 
    os.write((int) System.currentTimeMillis()); 
} 
Смежные вопросы