IO流(操作文件内容): 字节流
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站制作、达川网络推广、成都小程序开发、达川网络营销、达川企业策划、达川品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供达川建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
参考:
AssetManager
assets 文件夹用于存储应用需要的文件,在安装后可直接从其中读取使用或者写入本地存储中
Android Studio 默认不建立该文件夹,可以手动新建 : app - src - main - assets
或者,右键 main - New - Folder - Assets Folder
AssetManager 对象可以直接访问该文件夹:
获取方法:
使用函数 open 可以打开 assets 文件夹中对象,返回一个 InputStream 对象:
open
获取方法:
首先在百度手机助手或者在别的别的第三方下载工具里下载ireader,如图所示。
2.下载下来软件之后安装在手机上。在手机文件管理器里找到pdf文件。
3.打开该文件,这时候自动会默认使用ireader软件打开。这时候会提示需要安装pdf组件。
4.点击确定之后会自动安装pdf组件。安装好之后,再次在文件管理器内打开pdf文件。这时候就可以阅读该文件了。
有的时候程序需要去对android的指定目录或者全局目录进行遍历获取其中的文件,但是获取文件的时候可能会遇到无法列出文件夹中的文件的问题,这就是出现的问题,对于某个子文件夹进行获取listFiles()的时候返回为NULL,也就是不允许列出文件夹中内容。
这个是由于android中的安全机制的缘故,由于android继承了Linux系统的传统,对于某个特定的目录有用户的权限,一共分为三种--可读,可写,可执行;虽然说可以设置某个特定的目录的权限,但是对于目录里面的子目录和子文件都可以进行权限的设置,也就是说出了根目录权限之外,子目录本身的权限也决定了子目录可否访问,这一点需要清楚了解,所以在判断完了是否是目录之外,还需要在进行listFiles()获取File[]数据后判断获取的数组是否为空,如果为空的话,文件夹是不可访问的。样例代码如下:
01 package net.nowamagic.file;
02 import java.io.File;
03 import java.util.ArrayList;
04 import java.util.HashMap;
05 import java.util.Map;
06 import android.util.Log;
07 /**
08 * @author
09 * function 用于扫描SD卡上的文件
10 *
11 */
12 public class FileScan {
13
14 private static final String TAG = "FileScan";
15 public HashMapString, String getMusicListOnSys(File file) {
16
17 //从根目录开始扫描
18 Log.i(TAG, file.getPath());
19 HashMapString, String fileList = new HashMapString, String();
20 getFileList(file, fileList);
21 return fileList;
22 }
23
24 /**
25 * @param path
26 * @param fileList
27 * 注意的是并不是所有的文件夹都可以进行读取的,权限问题
28 */
29 private void getFileList(File path, HashMapString, String fileList){
30 //如果是文件夹的话
31 if(path.isDirectory()){
32 //返回文件夹中有的数据
33 File[] files = path.listFiles();
34 //先判断下有没有权限,如果没有权限的话,就不执行了
35 if(null == files)
36 return;
37
38 for(int i = 0; i files.length; i++){
39 getFileList(files[i], fileList);
40 }
41 }
42 //如果是文件的话直接加入
43 else{
44 Log.i(TAG, path.getAbsolutePath());
45 //进行文件的处理
46 String filePath = path.getAbsolutePath();
47 //文件名
48 String fileName = filePath.substring(filePath.lastIndexOf("/")+1);
49 //添加
50 fileList.put(fileName, filePath);
51 }
52 }
53
54 }
1. 读取操作
String path = "/sdcard/foo.txt";
String content = ""; //文件内容字符串
//打开文件
File file = new File(path);
//如果path是传递过来的参数,可以做一个非目录的判断
if (file.isDirectory()){
Toast.makeText(EasyNote.this, "没有指定文本文件!", 1000).show();
}
else{
try {
InputStream instream = new FileInputStream(file);
if (instream != null) {
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
//分行读取
while (( line = buffreader.readLine()) != null) {
content += line + "\n";
}
instream.close();
} catch (java.io.FileNotFoundException e) {
Toast.makeText(EasyNote.this, "文件不存在", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
2. 写入操作
String filePath = "/sdcard/foo2.txt";
String content = "这是将要写入到文本文件的内容";
//如果filePath是传递过来的参数,可以做一个后缀名称判断; 没有指定的文件名没有后缀,则自动保存为.txt格式
if(!filePath.endsWith(".txt") !filePath.endsWith(".log"))
filePath += ".txt";
//保存文件
File file = new File(filePath);
try {
OutputStream outstream = new FileOutputStream(file);
OutputStreamWriter out = new OutputStreamWriter(outstream);
out.write(content);
out.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
已经开启了授权读取本地文件权限,但是依然无法读取本地有些文件,这个原因很简单了。
application
android:allowBackup="true"
android:icon="@mipmap/logo128111"
android:label="@string/app_name"
android:roundIcon="@mipmap/logo128111"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:requestLegacyExternalStorage="true"
最关键的是要添加上 android:requestLegacyExternalStorage="true"这句就可以了。