我有一个字节数组,我想创建一个字节数组的图像文件(bmp文件)。我在src中创建了一个images文件夹(我的路径是src / images / test.bmp)。我的代码在下面,
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 :(得分:2)
File file = new File("/images/test.bmp");
行。
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"
。
答案 1 :(得分:0)
这里当你调用mkdir然后它创建test.bmp作为一个目录而不是一个文件,所以你必须首先创建目录然后你可以创建文件。见下面的代码。
File dir = new File("/images/");
dir.mkdirs();
file = new File("/images/test.bmp");
file.createNewFile();
答案 2 :(得分: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());
}
答案 3 :(得分:-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();
}
}