Android-通过file:///android_asset/test.txt路径获取不到文件

发布于 2016-11-14 23:07:26 字数 79 浏览 5342 评论 5

通过这个

File file = new File(“file:///android_asset/test.txt”);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

偏爱自由 2017-10-07 20:03:40

你这样写,是不行的,它不属于本地文件,file://这样的格式,应该属于FTP协议,你应该去找下相关的资料

偏爱自由 2017-07-30 06:29:08

的确是路径问题,通过file:///的方式访问是Windows系统下的远程访问机制,android下支持用http或者ftp访问的。
可以试试以下代码:

URL url = new URL("http://IP/android_asset/test.txt");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
**InputStream inputStream = urlConnection.getInputStream();**
int totalSize = urlConnection.getContentLength();

在取得收入流(inputstream)之后,就可以按照自己的要求处理了。

灵芸 2017-05-06 13:23:18

原因很简单,File 类是 Java 来的,Android 并没有额外的为其多写什么实现
注意看一下 File 的 javadoc 就明白了:
Constructs a new file using the specified path.

也就是说,想通过 File 类获取 assets 文件夹的数据是不现实的,
因为那些文件还都在 apk 压缩包里面

而至于 file:///android_asset/xx 的说法,之所以有
那是为了方便自己的应用调用 webview 来装载页面,并非统一的 file:// 协议

lz 可以尝试一下默认的浏览器
打开 file:///mnt/sdcard/xx.txt 是完全可行。
而 File 类去打开文件的话,需要的只是绝对路径,即 /mnt/sdcard/xx.txt

如果不能确定 assets 文件夹是否含有需要的文本,可以使用如下的方法:

 try {
String[] list = getAssets().list("");
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
} catch (IOException e) {
e.printStackTrace();
}

祝好,
斑驳敬上

想挽留 2017-04-08 13:39:02

之前用file:///android_asset/test.txt也是找不到 ,后面改成:

 InputStream is;
try {
is = this.getBaseContext().getAssets().open("test.txt");

FileOutputStream fos = new FileOutputStream("/data"
+ Environment.getDataDirectory().getAbsolutePath() + "/"
+ "/test.txt");
byte[] buffer = new byte[400000];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File("/data"+Environment.getDataDirectory().getAbsolutePath() + "/"
+ "/test.txt");

瑾兮 2016-12-09 03:29:50

我自己的一种做法,结合了wide_n以及网上一些其他人的提供的资料:

 InputStream is;

tmpFile = new File(getExternalFilesDir(null), "100ss_l.png"); //该路径指向SD卡目录下一个特定文件夹,需要在uses-permission设置WRITE-EXTERNAL-STORAGE权限

Log.w("File", "File path is: " + path);

try {

is = getClass().getResourceAsStream("/assets/www/images/100ss_l.png");

if(!tmpFile.exists()){
FileOutputStream fos = new FileOutputStream(tmpFile);
byte[] buffer = new byte[400000];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
}
is.close();
} catch (IOException e) {
Log.w("ExternalStorage", "Error writing " + tmpFile, e);
e.printStackTrace();
}

Uri uri = Uri.fromFile(tmpFile);
Log.w("Uri", "Uri path is: " + uri);
uris.add(uri);

图片被输出到一个临时文件中,在程序结束时可以删除文件:

 @Override
protected void onDestroy(){
super.onDestroy();

//delete temp file
if(tmpFile.exists())
tmpFile.delete();
}

顺便请教一下各位高手:
我见过一些程序写法如下:
getClass().getClassLoader().getResourceAsStream("/assets/www/images/100ss_l.png");
这里的getClassLoader()方法有什么作用呢?包括API DOC里也是推荐要加。但我加上这个反而取不到文件了。哪位了解的请指点一下。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文