如何从assets文件夹创建File对象?

时间:2016-12-27 06:54:48

标签: java android android-studio pdf

我正在尝试从我的资源文件夹中读取pdf文件,但我不知道如何获取pdf文件的路径。 我右键单击pdf文件并选择"复制路径"然后粘贴enter image description here

以下是我的代码的另一个屏幕截图: enter image description here

这是我的代码:

File file = new File("/Users/zulqarnainmustafa/Desktop/ReadPdfFile/app/src/main/assets/Introduction.pdf");

    if (file.exists()){
        Uri path = Uri.fromFile(file);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(path, "application/pdf");
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        try {
            this.startActivity(intent);
        }
        catch (ActivityNotFoundException e) {
            Toast.makeText(this, "No application available to view PDF", Toast.LENGTH_LONG).show();
        }
    }else{
        Toast.makeText(this, "File path not found", Toast.LENGTH_LONG).show();
    }

我总是找不到文件,帮我创建File对象或者让我知道如何获得我用file:///android_asset/Introduction.pdf尝试过的文件的确切路径,但没有成功。我也尝试使用Image.png,但从未获得file.exists()成功。我正在使用Mac版Android工作室。感谢

3 个答案:

答案 0 :(得分:4)

从资产获取输入流并将其转换为文件对象。

File f = new File(getCacheDir()+"/Introduction.pdf");
if (!f.exists()) 
try {

  InputStream is = getAssets().open("Introduction.pdf");
  byte[] buffer = new byte[1024];
  is.read(buffer);
  is.close();


  FileOutputStream fos = new FileOutputStream(f);
  fos.write(buffer);
  fos.close();
} catch (Exception e) { throw new RuntimeException(e); }

答案 1 :(得分:0)

你能试试这段代码吗?

background: linear-gradient(white, #DADADA);

然后尝试

AssetManager am = getAssets();
InputStream inputStream = am.open("Indroduction.pdf");
File file = createFileFromInputStream(inputStream);

private File createFileFromInputStream(InputStream inputStream) {

   try{
      File f = new File("new FilePath");
      OutputStream outputStream = new FileOutputStream(f);
      byte buffer[] = new byte[1024];
      int length = 0;

      while((length=inputStream.read(buffer)) > 0) {
        outputStream.write(buffer,0,length);
      }

      outputStream.close();
      inputStream.close();

      return f;
   }catch (IOException e) {
         //Logging exception
   }

   return null;
}

答案 2 :(得分:0)

Kotlin 中的短转换器(将资产存储为缓存文件):

fun fileFromAsset(name: String) : File =
    File("$cacheDir/$name").apply { writeBytes(assets.open(name).readBytes()) }

cacheDir 只是 this.getCacheDir() 的简写,应该为您预定义。