我想将本地目录的所有内容(包括子目录)复制到一个桑巴舞共享。有没有简单的方法可以做到这一点?当源和目标都在SMB上时,类似于SmbFile.copyTo()的方法。
i5desfxk1#
如果将源和目标都定义为SmbFiles,则只需使用SmbFile.copyTo()。
String userName = "USERNAME"; String password = "PASSWORD"; String user = userName + ":" + password; String destinationPath = "smb://destinationlocation.net"; String sourcePath = "smb://sourcelocation.net"; NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user); SmbFile dFile = new SmbFile(destinationPath, auth); SmbFile sFile = new SmbFile(sourcePath, auth); sFile.copyTo(dFile);
目录及其内容应全部从源位置复制到目标位置。
khbbv19g2#
我刚才做了一些类似的事情,发现了这个将近10年前的问题。下面的代码将一个本地文件夹及其所有子文件夹和文件复制到一个SMB共享。它使用java.nio中的Files.walk来“遍历”所有本地文件和文件夹。如果它是一个文件夹,则调用mkdirs(),该函数将在共享上创建所有所需的文件夹(如果这些文件夹尚未存在)。如果需要,将创建文件,并使用Files.copy复制文件内容。如果共享上已经存在某个文件,则将覆盖其内容。代码使用try-with-resource块来确保打开的资源被关闭。
java.nio
Files.walk
mkdirs()
Files.copy
String srcUrl = "path/to/local/folder"; String destUrl = "smb://user:password@host/share"; try(Stream<Path> pathStream = Files.walk(Paths.get(srcUrl))) { pathStream.forEach(sourcePath -> { try { SmbFile destinationFile = new SmbFile(destUrl + sourcePath.toString().substring(srcUrl.length())); if(Files.isDirectory(sourcePath)) { if(!destinationFile.exists()) { // create any missing directories destinationFile.mkdirs(); } } else { // it's a file -> create file (if it's not already there) and copy content if(!destinationFile.exists()) { destinationFile.createNewFile(); } try(SmbFileOutputStream out = new SmbFileOutputStream(destinationFile)) { Files.copy(sourcePath, out); } } } catch(IOException e) { throw new RuntimeException(e); } }); } catch(Exception e) { logger.error("failed to copy from {} to {}", srcUrl, destUrl, e); }
2条答案
按热度按时间i5desfxk1#
如果将源和目标都定义为SmbFiles,则只需使用SmbFile.copyTo()。
目录及其内容应全部从源位置复制到目标位置。
khbbv19g2#
我刚才做了一些类似的事情,发现了这个将近10年前的问题。下面的代码将一个本地文件夹及其所有子文件夹和文件复制到一个SMB共享。
它使用
java.nio
中的Files.walk
来“遍历”所有本地文件和文件夹。如果它是一个文件夹,则调用mkdirs()
,该函数将在共享上创建所有所需的文件夹(如果这些文件夹尚未存在)。如果需要,将创建文件,并使用Files.copy
复制文件内容。如果共享上已经存在某个文件,则将覆盖其内容。代码使用try-with-resource块来确保打开的资源被关闭。