Android-通过file:///android_asset/test.txt路径获取不到文件
通过这个
File file = new File(“file:///android_asset/test.txt”);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
通过这个
File file = new File(“file:///android_asset/test.txt”);
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
你这样写,是不行的,它不属于本地文件,file://这样的格式,应该属于FTP协议,你应该去找下相关的资料
的确是路径问题,通过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)之后,就可以按照自己的要求处理了。
原因很简单,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();
}
祝好,
斑驳敬上
之前用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");
我自己的一种做法,结合了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里也是推荐要加。但我加上这个反而取不到文件了。哪位了解的请指点一下。