我有一个上传组件,我应该导入一个xml文件来解析它。
我正在尝试使用File.createTempFile方法来创建文件,但是有些奇怪的事情正在发生。
例如,如果我使用名为“test.xml”的文件并使用createTempFile方法在磁盘上创建它,则生成文件的名称将变为类似“test.xml13234xml”。如何创建文件正确的方法?
答案 0 :(得分:2)
当使用ie createTempFile
方法时,这是预期的,因为它隐式创建一个带有随机前缀的文件:
// a part of createTempFile method
private static final SecureRandom random = new SecureRandom();
static File generateFile(String prefix, String suffix, File dir) {
long n = random.nextLong();
if (n == Long.MIN_VALUE) {
n = 0; // corner case
} else {
n = Math.abs(n);
}
return new File(dir, prefix + Long.toString(n) + suffix);
}
应该提供类似'test.xml13234xml'的内容。
如果要创建具有正确名称的文件并保留以供以后使用,可以在uploadSucceeded
方法中重命名/移动它。
public class ExampleUpload implements Upload.Receiver, Upload.SucceededListener {
private Upload xmlUpload;
private File tempFile;
public ExampleUpload() {
this.xmlUpload = new Upload("Upload:", this);
this.xmlUpload.addSucceededListener(this);
}
@Override
public OutputStream receiveUpload(String filename, String mimeType) {
try {
tempFile = File.createTempFile(filename, "xml");
tempFile.deleteOnExit();
return new FileOutputStream(tempFile);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void uploadSucceeded(SucceededEvent event) {
try {
File destinationFile = new File("c:\\" + event.getFilename());
FileUtils.moveFile(tempFile, destinationFile));
// TODO read and parse destinationFile
} catch (IOException e) {
e.printStackTrace();
}
}
}