首先。
感谢您阅读此问题。
目前,我是Android新手(就像已经开始学习一个月了]
现在我需要在SD卡上“递归”写入文件和目录。
我的代码在下面的工作方式.....
private void recursiveFolderDownload(String src, Uri dst) throws SftpException {
Log.e("dst",dst.toString());
DocumentFile pickedDir = DocumentFile.fromTreeUri(context, dst);
Vector<ChannelSftp.LsEntry> fileAndFolderList = channelSftp.ls(src);
for (ChannelSftp.LsEntry item : fileAndFolderList) {
if (!item.getAttrs().isDir()) {
DocumentFile newFile = pickedDir.createFile("",item.getFilename());
write(src + "/" + item.getFilename(),newFile.getUri());
} else if (!(".".equals(item.getFilename()) || "..".equals(item.getFilename()))) {
DocumentFile newDir = pickedDir.createDirectory(item.getFilename());
recursiveFolderDownload(src + "/" + item.getFilename(), newDir.getUri());
}
}
}
老实说,我编写的每个文件和目录都只写在同一路径上
这是顶部(content://com.android.externalstorage.documents/tree/E3AB-1A0D%3A)
我是真的!
每个文件和目录都写在最上面!
我在这里想念东西吗?
如果这样做,请有智慧的人为我提供解决方案。
再次,感谢您阅读此问题
希望您有美好的一天
看看这是否更好:
private void recursiveFolderDownload(String src, DocumentFile pickedDir) throws SftpException {
Log.e("dst",dst.toString());
Vector<ChannelSftp.LsEntry> fileAndFolderList = channelSftp.ls(src);
for (ChannelSftp.LsEntry item : fileAndFolderList) {
if (!item.getAttrs().isDir()) {
DocumentFile newFile = pickedDir.createFile("",item.getFilename());
write(src + "/" + item.getFilename(),newFile.getUri());
} else if (!(".".equals(item.getFilename()) || "..".equals(item.getFilename()))) {
DocumentFile newDir = pickedDir.createDirectory(item.getFilename());
recursiveFolderDownload(src + "/" + item.getFilename(), newDir);
}
}
}
在您现有的代码中,您:
createDirectory()
创建目录DocumentFile
从createDirectory()
中解开getUri()
DocumentFile
重新创建fromTreeUri()
继续使用DocumentFile
直到您绝对需要Uri
(在write()
中,这是更安全,更有效的方法。
您对recursiveFolderDownload()
的初始呼叫将使用我从原始样本中删除的DocumentFile.fromTreeUri(context, dst)
呼叫。