要使用SAF将文件移动到另一个文件夹,并列出具有显示名称的文件,可以按照以下步骤进行操作:
SAFActivity
:public class SAFActivity extends AppCompatActivity {
private static final int REQUEST_CODE_MOVE_FILE = 1;
private static final int REQUEST_CODE_LIST_FILES = 2;
private DocumentFile mSourceFile;
private DocumentFile mDestinationFolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 选择源文件
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, REQUEST_CODE_MOVE_FILE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_MOVE_FILE && resultCode == RESULT_OK) {
Uri sourceUri = data.getData();
mSourceFile = DocumentFile.fromSingleUri(this, sourceUri);
// 选择目标文件夹
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_LIST_FILES);
} else if (requestCode == REQUEST_CODE_LIST_FILES && resultCode == RESULT_OK) {
Uri treeUri = data.getData();
mDestinationFolder = DocumentFile.fromTreeUri(this, treeUri);
// 移动文件
moveFileToDestinationFolder(mSourceFile, mDestinationFolder);
// 列出文件
listFilesWithDisplayName(mDestinationFolder);
}
}
private void moveFileToDestinationFolder(DocumentFile sourceFile, DocumentFile destinationFolder) {
sourceFile.renameTo(destinationFolder);
}
private void listFilesWithDisplayName(DocumentFile folder) {
DocumentFile[] files = folder.listFiles();
if (files != null) {
for (DocumentFile file : files) {
String displayName = file.getName();
// 处理具有显示名称的文件
// ...
}
}
}
}
SAFActivity
:
这样,当启动应用时,会打开一个文件选择器,选择源文件后会再次打开文件选择器选择目标文件夹。选择目标文件夹后,会将源文件移动到目标文件夹并列出具有显示名称的文件。你可以在listFilesWithDisplayName
方法中处理具有显示名称的文件。