我跟着this tutorial在我的JSF2应用程序中上传文件。 该应用程序工作正常,但我对一个方面不满意。 在重建请求时,通过请求发送的文件将保存在磁盘上的某个位置。
即使文件已保存,我还需要使用在输入包含操作方法的Managed Bean后可用的名称重命名该文件。
因此,我决定使用所需名称创建一个新文件,复制已保存的文件,然后删除不需要的文件。
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文件无效或不受支持"
这是我的问题:
LE 我也知道了this tutorial,但我只想尝试 mojarra 。
答案 0 :(得分:3)
已经在java.io.File
对象中内置了一个重命名方法,如果它对你的情况不起作用,我会感到惊讶。
public boolean renameTo(File dest) Renames the file denoted by this abstract pathname. 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类对上载的文件进行验证。
答案 1 :(得分:2)
处理图像等二进制文件时,请勿使用Reader
和Writer
。使用流:FileInputStream
和FileOutputStream
。最好的变体是使用renameTo
方法使用@Perception解决方案。
读者将文件读取为包含字符(例如txt,属性,yaml文件)。图像文件不是字符,它们是二进制文件,您必须使用流。