1

我处于必须将java.io.File对象强制转换为 Strutsorg.apache.struts.upload.FormFile对象的情况。类型转换导致错误。任何人都可以建议我可以用来执行上述操作的方法或代码片段。任何意见将是有益的。

4

2 回答 2

1

我实施了上述建议,它对我有用。它动态地将 java File 转换为 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();
于 2015-02-13T05:12:27.697 回答
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");
        }
    }
}

在这里,我没有实现所有方法,因为实现取决于您的要求。

于 2013-06-07T08:25:47.690 回答