[英]How to create File object from assets folder?
I am trying to read a pdf file from my assets folder but I do not know how to get the path of pdf file.我正在尝试从我的资产文件夹中读取 pdf 文件,但我不知道如何获取 pdf 文件的路径。 I right click on pdf file and select "copy Path" and paste it我右键单击pdf文件并选择“复制路径”并粘贴它
Here is the another screen shot of my code:这是我的代码的另一个屏幕截图:
Here is my code:这是我的代码:
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();
}
I always get file not found, Help me to create File object or let me know how I can get the exact path for a file I also tried with file:///android_asset/Introduction.pdf
but no success.我总是找不到文件,帮助我创建文件对象或让我知道如何获取文件的确切路径我也尝试过使用file:///android_asset/Introduction.pdf
但没有成功。 I also tried with Image.png but never gets file.exists() success.我也尝试过 Image.png 但从未获得 file.exists() 成功。 I am using Mac version of Android studio.我正在使用 Mac 版的 Android Studio。 Thanks谢谢
get input stream from asset and convert it to a file object.从资产中获取输入流并将其转换为文件对象。
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); }
Can you try this code你能试试这个代码吗
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;
}
Then try with然后尝试
File file = new File("new file path");
if (file.exists())
Short converter (storing asset as cache file) in Kotlin : Kotlin 中的短转换器(将资产存储为缓存文件):
fun fileFromAsset(name: String) : File =
File("$cacheDir/$name").apply { writeBytes(assets.open(name).readBytes()) }
cacheDir
is just shorthand for this.getCacheDir()
and should be predefined for you. cacheDir
只是this.getCacheDir()
简写,应该为您预定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.