最近我也遇到了类似的情况,但是我在网上没有找到好的解决方案,但是我写了一个基本的代码,可以轻松完成我需要的事情。
在您的情况下,您需要使用带有身份验证的 SmbFile 从源(远程目录)复制 excel 文件到目标(本地目录),然后才转换目标的 excel 文件路径(getCanonicalPath() 函数) 并使用下面的代码将其从 SmbFile 格式转换为 File 格式。
之后,使用文件目标路径创建您的 File 对象并执行您想要的操作。
我使用JCIFS 使用SMBFILE 类来处理远程共享目录。
首先需要导入主库:
import java.io.File;
import java.io.IOException;
import jcifs.smb.SmbFile;
其次,需要创建一个静态方法,将SmbFile格式转换为File格式:
/**
* This method convert a directory path from SmbFile format to File format.<br />
* <p><strong>Sintax:</strong> <br /> convertSmbFileToFile("Canonical Path")</p>
* <p><strong>Example:</strong> <br /> convertSmbFileToFile("smb://localhost/D$/DOCUMENTOS/workspace/tests2/access")</p>
* @param smbFileCanonicalPath String
* @see String
*/
public static String convertSmbFileToFile(String smbFileCanonicalPath) {
String[] tempVar = smbFileCanonicalPath.substring(6).replace("$", ":").split("/");
String bar = "\\";
String finalDirectory = "";
for (int i = 1; i < tempVar.length; i++) {
finalDirectory += tempVar[i] + bar;
if (i == tempVar.length - 1) {
finalDirectory = finalDirectory.substring(0,finalDirectory.length()-1);
}
}
return finalDirectory;
}
可选,您也可以创建一个静态方法将 File 格式转换为 SmbFile 格式:
/**
* This method convert a directory path from File format to SmbFile format.<br />
* <p><strong>Sintax:</strong> <br /> convertFileToSmbFile("Canonical Path")</p>
* <p><strong>Example:</strong> <br /> convertFileToSmbFile("D:\DOCUMENTOS\workspace\tests2\access")</p>
* @param fileCanonicalPath String
* @see String
*/
public static String convertFileToSmbFile(String fileCanonicalPath) {
return "smb://localhost/" + fileCanonicalPath.toString().replace(":", "$").replace("\\", "/");
}
最后,你可以像下面的例子那样调用方法:
String dirDest = "access/";
try {
File localDirFile = new File(dirDest);
SmbFile localSmbDirFile = new SmbFile(convertFileToSmbFile(localDirFile.getCanonicalPath()));
File localDirFile2 = new File(convertSmbFileToFile(localSmbDirFile.getCanonicalPath()));
System.out.println("Original File Format: " + localDirFile.getCanonicalPath());
System.out.println("Original File Format to SmbFile Format: " + localSmbDirFile.getCanonicalPath());
System.out.println("Converted SmbFile Format to File Format: " + localDirFile2.getCanonicalPath());
} catch (IOException e) {
System.err.println("[ERR] IO Exception - " + e);
}
之前代码运行的结果:
Original File Format: D:\DOCUMENTOS\workspace\tests2\access
Original File Format to SmbFile Format: smb://localhost/D$/DOCUMENTOS/workspace/tests2/access
Converted SmbFile Format to File Format: D:\DOCUMENTOS\workspace\tests2\access
额外信息:getCanonicalPath()
也许这段代码会对你有所帮助,如果你愿意,我可以讨论。
祝你好运!