将SmbFile转换为Java IO文件

ara*_*een 5 java smb

我的Java应用程序需要访问保存在远程共享文件夹中的大型excel文件(大小为1GB +).我正在使用SmbFile来获取带有身份验证的文件.

注意:下载文件不是主要用于大小原因的选项.

问题是我需要excel文件是Java IO文件而不是SmbFile,因为我用来解析excel 的其他库只接受Java IO文件.

  1. 有没有办法将此SmbFile转换为Java兼容文件?

Ada*_*lik 6

查看库的实现细节:

该库将采用提供的InputStream并将其输出到文件系统.(...)创建文件后,它将从文件系统流入内存.

需要以这种方式输出流的原因与ZIP文件的工作方式有关.由于XLSX文件格式基本上是ZIP文件,因此无法在不读取整个InputStream的情况下找到所有条目.

(...)此库通过将流读出到临时文件中来工作.作为自动关闭操作的一部分,将删除临时文件.

如果您需要更多地控制文件的创建/处理方式,可以选择使用a初始化库java.io.File.此文件不会被写入或删除

因此,如果您使用FileInputStreamAPI 无关紧要- 无论如何都需要下载整个文件.

最简单的解决方案是传递SmbFile.getInputStream()

StreamingReader.builder().read(smbFile.getInputStream())
Run Code Online (Sandbox Code Playgroud)

但也可以先下载文件,例如.通过IOUtils.copy()Files.copy()

File file = new File("...");
try (
     in = smbFile.getInputStream();
     out = new FileOutputStream(file)
) {
    IOUtils.copy(in, out);
}
Run Code Online (Sandbox Code Playgroud)

要么

try (in = smbFile.getInputStream()) {
    Files.copy(smbFile.getInputStream(), file.toPath());
}
Run Code Online (Sandbox Code Playgroud)

并传递file

StreamingReader.builder().read(file)
Run Code Online (Sandbox Code Playgroud)