我试图通过使用文档文件(由于存储访问框架)来检查文件在创建之前是否存在。但是
DocumentFile().fromTreeUri()
移除潜在URI的非存在部分,然后导致
DocumentFile().exists()
不管它是否存在,总是返回真实的。
我创建了一个简单的例子来证明我的观点。首先,我们要求用户选择一个目录:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Ask the user for the source folder
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 100);
}
在回答问题时,我们补充说
/fictionalFile
到路径(从而使它成为一个不存在的文件),然后检查它是否存在:
public void onActivityResult(int requestCode, int resultCode, Intent resultData)
{
if (resultCode == RESULT_OK)
{
if(requestCode == 100)
{
Uri fictionalURI = Uri.parse(resultData.getData()+"/fictionalFile");
DocumentFile fictionalFile = DocumentFile.fromTreeUri(this, fictionalURI);
Log.i("STORAGE", "FICTIONAL URI: "+fictionalURI);
Log.i("STORAGE", "FICTIONAL DOCUMENTFILE URI: "+fictionalFile.getUri());
if(fictionalFile.exists())
{
Log.i("STORAGE", "Fictional file exists");
}
}
}
}
但是,当文档文件.FasTeReURIE()在虚构URI上运行时,假“/FrutoStudio文件”部分丢失,这导致DoTrpField.SufStand()函数返回true,如下面的LogCat所示:
I/STORAGE:虚构的URI:content://com.android.externalstorage.documents/tree/17FA-1C18%3AFileSync%2Ftarget/虚构的文件
I/STORAGE:虚构文档文件URI:content://com.android.externalstorage.documents/tree/17FA-1C18%3AFileSync%2Ftarget/document/17FA-1C18%3AFileSync%2Ftarget
I/St存储:虚构文件存在
(在上面的例子中,我使用的是SD卡,因此是长路径名)
是否有另一种方法来检查尚未创建的文档文件是否存在?用例是,当将文件从目录A复制到目录B时,我想在开始传输之前检查目录B中是否已经存在该文件。
更新:
我现在意识到
DocumentFile.fromTreeUri()
是错误的,我应该使用
DocumentFile.fromSingleUri()
. 这有帮助,但在跑步时
.exists()
在我得到的新文件上
W/DocumentFile: Failed query: java.lang.UnsupportedOperationException: Unsupported Uri content://com.android.externalstorage.documents/tree/17FA-1C18%3AFileSync%2Ftarget/fictionalFile
. 有什么想法吗?
public void onActivityResult(int requestCode, int resultCode, Intent resultData)
{
if (resultCode == RESULT_OK)
{
if(requestCode == 100)
{
Uri fictionalURI = Uri.parse(resultData.getData()+"/fictionalFile");
DocumentFile fictionalFile = DocumentFile.fromSingleUri(this, fictionalURI);
Log.i("STORAGE", "FICTIONAL URI: "+fictionalURI);
Log.i("STORAGE", "FICTIONAL DOCUMENTFILE URI: "+fictionalFile.getUri());
if(fictionalFile != null && fictionalFile.exists())
{
Log.i("STORAGE", "Fictional file exists");
}
}
}
}