首先。
感谢您阅读此问题。
目前,我是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
(in write()
)时,它更安全,更有效。
您的初始呼叫recursiveFolderDownload()
将使用DocumentFile.fromTreeUri(context, dst)
我从原始样本中删除的呼叫。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句