将java.io.File转换为org.apache.struts.upload.FormFile

将java.io.File转换为org.apache.struts.upload.FormFile,java,file-io,struts,Java,File Io,Struts,我的处境是,我必须将java.io.File对象强制转换为Strutsorg.apache.Struts.upload.FormFile对象。类型转换导致错误。任何人都可以建议一种方法或代码片段,我可以用它来做上述操作。任何建议都会有帮助。您不能直接将文件转换为FormFile,因为该文件未实现FormFile接口。但您可以为文件对象创建包装器并实现此接口。比如: 导入org.apache.struts.upload.FormFile import java.io.*; public clas

我的处境是,我必须将
java.io.File
对象强制转换为Struts
org.apache.Struts.upload.FormFile
对象。类型转换导致错误。任何人都可以建议一种方法或代码片段,我可以用它来做上述操作。任何建议都会有帮助。

您不能直接将文件转换为FormFile,因为该文件未实现FormFile接口。但您可以为文件对象创建包装器并实现此接口。比如: 导入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");
        }
    }
}

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

您不能直接将文件转换为FormFile,因为文件没有实现FormFile接口。但您可以为文件对象创建包装器并实现此接口。比如: 导入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");
        }
    }
}

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

我实现了上述建议,它对我有效。它动态地将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();

我实施了上述建议,它对我有效。它动态地将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();

您的用例是什么?上传文件的javadoc格式显示为
FormFile
,您需要将其保存在文件系统或数据库或其他任何地方,为此,此接口提供了获取所需信息+文件数据的方法。你能把你想做的事情的代码贴出来吗?你的用例是什么?上传文件的javadoc格式显示为
FormFile
,您需要将其保存在文件系统或数据库或其他任何地方,为此,此接口提供了获取所需信息+文件数据的方法。你能把你想做的事情的代码贴出来吗?