我处于一种情况,我必须将java.io.File
对象强制转换为Struts org.apache.struts.upload.FormFile
对象。类型转换导致错误。任何人都可以建议我可以用来执行上述操作的方法或代码片段。任何建议都会有所帮助。
答案 0 :(得分:0)
您无法直接将File转换为FormFile,因为File不会实现FormFile接口。但是您可以为File对象创建包装器并实现此接口。就像是: import org.apache.struts.upload.FormFile;
import java.io.*;
public class FileWrapper implements FormFile {
private final File file;
public FileWrapper(File file) {
this.file = file;
}
@Override
public String getContentType() {
}
@Override
public void setContentType(String s) {
}
@Override
public int getFileSize() {
}
@Override
public void setFileSize(int i) {
}
@Override
public String getFileName() {
}
@Override
public void setFileName(String s) {
}
@Override
public byte[] getFileData() throws IOException {
byte[] buffer = new byte[(int) file.length()];
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(buffer);
fileInputStream.close();
return buffer;
}
@Override
public InputStream getInputStream() throws IOException {
return new FileInputStream(file);
}
@Override
public void destroy() {
if (!file.delete()) {
throw new RuntimeException("File " + file.getName() + " can't be deleted");
}
}
}
这里我没有实现所有方法,因为实现取决于您的要求。
答案 1 :(得分:0)
我实施了上述说法,它对我有用。它将java文件动态转换为FormFile。你还必须设置文件名和&动态转换时的大小。
public String getFileName() {
return this.file.getName();
}
public int getFileSize() {
return (int) this.file.length();
}
在调用此包装器时,您必须传递文件位置&可以直接将其分配给FormFile。
FileWrapper fileWr = new FileWrapper(new File("X://file/file.xlsx"));
FormFile file = fileWr;
String fileName = file.getFileName();