0

我一直在开发一个读取 Excel 文件并将其数据输入数据库的函数。Excel 文件由最终用户在输入文件 (HTML) 中选择。当我单击提交按钮时,控制器(Java)正常接收文件名,但是,当我尝试将上传的文件放入 InputStream 以读取文件数据并对其进行处理时,出现以下异常:“java. io.FileNotFoundException:“文件名”(O sistema não pode encontrar o caminho especificado)“

我已经为此工作了 3 天,直到现在,我在谷歌没有得到任何答案。

控制器方法代码

@Post
public void pegaArquivoMetas(HttpSession session, UploadedFile planilha) throws IOException, BiffException {
    InputStream inp = new FileInputStream(planilha.getFileName());
    try{
        Workbook workbook = Workbook.getWorkbook(inp);
    }catch(BiffException  e){
        e.printStackTrace();
    }
}

JSP 表单代码

<form enctype="multipart/form-data" method="post" action="${linkTo[MonitorController].pegaArquivoMetas}" >
        <div class="col-lg-6">
            <label for="txtArquivo"></label>
            <input type="file" accept=".xls,.xlsx" name="planilha" class="form-control" id="txtArquivo" />
        </div>

        <div class="col-lg-2">
            <label for="btnAtualizar"></label>
            <button type="submit" id="btnAtualizar" class="btn btn-success btn-block disabled"><i class="fa fa-refresh"></i> Atualizar</button>
        </div>
</form>

我试图在 Controller 中添加更多代码,但是,我在“InputStream inp”的同一行得到了错误。

如果你们需要更多信息,请不要犹豫,问。

4

3 回答 3

0

我发现发生了什么事。

没有必要将 UploadedFile 放入 InputStream。将 UploadFile 直接放入工作簿对象是可能的,并且是必要的。

所以,控制器代码是这样的:

public void pegaArquivoMetas(HttpSession session, UploadedFile planilha) throws IOException, BiffException {
    Workbook wb;
    try{
        wb = Workbook.getWorkbook(planilha.getFile());
        Sheet sh = wb.getSheet(0);
        int linhas = sh.getRows();
    }catch (BiffException e) {
        e.printStackTrace();
    }
}

非常感谢你们 !!!

于 2017-01-10T17:22:26.010 回答
0

这里有点猜测,因为我对 vraptor 没有做太多,但假设你使用的是这个接口: https ://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/ com/caelum/vraptor/interceptor/multipart/UploadedFile.java

然后你应该使用planilha.getFile()直接获取InputStream. getFileName()仅指上传文件的“简单名称”,在上传者的电脑上。您应该只将该值用于显示目的。

于 2017-01-10T13:51:45.513 回答
0

很可能,因为您实际上没有磁盘上的文件,而是一个 UploadedFile 对象。尝试使用

try (InputStream is = planilha.getInputStream()) {
  Workbook workbook = Workbook.getWorkbook(inp);
} catch (BiffException e) {
    e.printStackTrace();
}

因为这应该给你一个 InputStream 来使用。

于 2017-01-10T13:51:49.243 回答