如何测试SDCard上是否存在文件?

时间:2015-10-20 22:53:47

标签: android pdf input copy

我正在尝试将PDF文件从我应用的私人存储空间复制到SD卡,以便其他PDF程序可以打开它。我的问题是测试文件是否存在。如果测试file.exists()为true,我将不再复制该文件。问题是当条件为真时,android会显示一条消息,指出我的文件不是有效的PDF文件

private void CopyReadAssets()
{
    AssetManager assetManager = getAssets();

    InputStream in = null;
    OutputStream out = null;
    File file = new File(getFilesDir(), "ac8.pdf");

    try {
        in = assetManager.open("ac8.pdf");
        out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

        if (file.exists()) {
            Toast.makeText(getApplicationContext(), "File already exist", Toast.LENGTH_LONG).show();
        } else {
            copyFile(in, out);
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
        }
    } catch(Exception e)
    {
        Log.e("tag", e.getMessage());               
    }

    try {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(
                Uri.parse("file://" + getFilesDir() + "/ac8.pdf"),
                "application/pdf");

        startActivity(intent);
    } catch (Exception e){
        Toast.makeText(getApplicationContext(), "No PDF application found", Toast.LENGTH_LONG).show();
    }
}

private void copyFile(InputStream in, OutputStream out) throws IOException
{
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1)
    {
        out.write(buffer, 0, read);
    }
}

1 个答案:

答案 0 :(得分:0)

第三方应用无法访问您应用的internal storage(例如literal_eval目录)。之一:

  • 将文件写入external storage

  • 将文件保留在内部存储空间中,然后use FileProvider通过getFilesDir() content://将文件提供给第三方PDF查看器

您可以在the documentation中详细了解第二种方法。