从数据库中存取数组有两个方案:

1、将数组转换为字符串然后存入到text类字段中,查询时将读出的字符串再按一定规则转为数组

2、将数组直接按二进制数据存入blob类字段中
今天2020-1-9遇到一个尚未解决的问题。在Eclipse中能正确地读取电脑硬盘数据,在Android Studio中却不能,出现未找到文件异常。尝试了assets方法也没成功。Eclipse中代码如下:

①@Test
    public void testFileInputStream() {
        File file = new File("F:\\1.txt");
        FileInputStream fis = null;
        StringBuffer sb = new StringBuffer();
        try {
            fis = new FileInputStream(file);
            byte[] b = new byte[10];
            int len;
            try {
                while((len = fis.read(b)) != -1) {
                    for(int i =0;i<len;i++) {
                        sb.append((char)b[i]);
//                        System.out.print((char)b[i]);
                    }
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(sb.toString());

//        字符串分割成字符数组
        String[] str = sb.toString().split("\t");
        for(int i =0;i<str.length;i++) {
            System.out.println(str.length);
            System.out.println(str[i]);
        }
    }

②@Test
    public void txtFile() {
        StringBuilder result = new StringBuilder();
        try {
        BufferedReader br = new BufferedReader(new FileReader(new File("F:\\1.txt")));//构造一个BufferedReader类来读取文件
        String s = null;
        while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行
//            result.append(System.lineSeparator() + s);
            result.append(s);
        }
        br.close();
        } catch (Exception e) {
        e.printStackTrace();
        }
        System.out.println(result.toString());
    }

方法②是借鉴的。在https://www.jianshu.com/p/5974fcf88170这篇博客中终于发现有人遇到和我一样的问题。有人回复:应该是路径问题,因为as程序是要运行在android上的,你android设备上没有这个文件或这个目录,所以就发生了上述异常,解决办法就是把你的txt文件放在android设备上,把文件放到手机的sd卡或者项目中(raw或assert文件夹)去然后找这个路径来读。另外你这个之所以能用Javac能得出结果,是因为java虚拟机机是在你的电脑上,所以你运行程序java虚拟机是从的电脑上找文件路径,故而能运行成功。

assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件。
Android还存在一种放置在res下的raw目录,该目录与assets目录不同。
注意点:
1、 assets目录不会被映射到R中,因此,资源无法通过R.id方式获取,必须要通过AssetManager进行操作与获取;res/raw目录下的资源会被映射到R中,可以通过getResource()方法获取资源。
2、 多级目录:assets下可以有多级目录,res/raw下不可以有多级目录。
3、 编码(都不会被编码):assets目录下资源不会被二进制编码;res/raw应该也不会被编码。

Android Studio 添加assets目录的2种方法

assets内资源使用方法(转自https://www.jianshu.com/p/5974fcf88170)

1、 资源使用

AssetManager am = getAssets();
InputStream is = am.open("filename");  

2、 信息获取
通过am.list(“”)得到assets目录下的所有文件和子目录名称的数组,通过am.list(SubFolderName),得到assets/SubFolderName下所有的文件和子目录名称的数组。
通过am.openFd(fileName)得到的AssetFileDescriptor对象来获得fileName文件的信息,例如长度等。
AssetFileDescriptor 能够完成对文件的其他一些操作,可以关注该类。

AssetManager接口介绍:

String[] list(String path);//列出该目录下的下级文件和文件夹名称InputStream open(String fileName);//以顺序读取模式打开文件,默认模式为ACCESS_STREAMINGInputStream open(String fileName, int accessMode);//以指定模式打开文件。读取模式有以下几种://ACCESS_UNKNOWN : 未指定具体的读取模式//ACCESS_RANDOM : 随机读取//ACCESS_STREAMING : 顺序读取//ACCESS_BUFFER : 缓存读取void close()//关闭AssetManager实例

Android Studio 添加res/raw目录的方法

+

资源使用

InputStream is = getResources().openRawResource(R.id.fileNameID) ;
//R.id.fileNameID
为需要访问的文件对应的资源ID

获取到输入流,即可使用。

现已实现利用assets方法实现存储。

AssetManager am = getAssets();StringBuffer sb = new StringBuffer();String str = null;try {InputStream is = am.open("1.txt");byte[] b = new byte[10];int len;while((len=is.read(b))!=-1){for(int i =0;i<len;i++) {sb.append((char)b[i]);// 这里面应该能做优化}}} catch (IOException e) {e.printStackTrace();}
str = sb.toString().trim();if(str.equals("")){}else{text1.setText(str);}

最后可将assets里面的1.txt文本的内容显示到TextView中。在后第二篇中的方法也可以实现。

第二种方法有时间再试。

(五)SQLite数据存储与读取相关推荐

  1. Unity(游戏)中五种数据存储的方法

    Unity(游戏)中五种数据存储的方法 一.PlayerPrefs unity3d提供了一个用于本地持久化保存与读取的类-------PlayerPrefs.工作原理很简单,以键值对的形式将数据保存在 ...

  2. 五维数据存储技术:容量可达蓝光3000倍

    英国南安普顿大学科学家近日开发出一种新的数据存储技术,利用玻璃中的微型纳米结构来编码信息.基于这一技术,标准尺寸光碟能保存约360TB的数据,而在温度高达190摄氏度的环境中可维持长达138亿年.这一 ...

  3. Labview数据存储与读取——TDMS文件的创建与写入

    Labview数据存储与读取--TDMS文件的创建与写入 你好,这是我在自学Labview编写软件过程中使用的一些功能.我在存储采集卡数据时,通过阅读大量他人的程序,发现TDM及TDMS文件十分适合波 ...

  4. Android数据存储和读取的三种方法

    Android数据存储和读取的三种方法 一.文件存储 二.Context存储 三.SharedPreferences存储 一.文件存储 1.利用文件进行数据的存储 public static bool ...

  5. python读二进制格点雷达基数据_对numpy中二进制格式的数据存储与读取方法详解...

    使用save可以实现对numpy数据的磁盘存储,存储的方式是二进制.查看使用说明,说明专门提到了是未经压缩的二进制形式.存储后的数据可以进行加载或者读取,通过使用load方法. In [81]:np. ...

  6. Arduino EEPROM对结构体数据存储和读取

    Arduino EEPROM对结构体数据存储和读取 以Arduino UNO开发板为例. 注意:该示例不适用于在ESP8266上使用 EEPROM.put()或者 EEPROM.get()来对数据读写 ...

  7. LabVIEW存储数据笔记——数据存储与读取

    LabVIEW存储数据笔记 --数据存储与读取 一.基础控件 图1 右击程序面板 图2 (a)写数据:(b)读数据 二.写入数据 1.基础配置 图3 写数据引脚 'file(use dialog)': ...

  8. R语言与数据分析——【笔记】2.R语言数据存储与读取

    R语言通过工作目录来对文件读取和写入,若一个文件不在工作目录,则必须给出其路径 可使用命令getwd()(获得工作目录)来找到目录:使用命令setwd("F:/2glkx")将当前 ...

  9. Android学习笔记(五)——数据存储(二)SQLite和ContentProvider

    3.SQLite 类SQLiteDatebase的实例代表了一个SQLite数据库,它的方法可以执行SQL语句.数据库对于一个应用是私有的,在一个应用中,数据库名也是唯一的. SQLiteOpenHe ...

最新文章

  1. matlab-绘制分叉与混沌分支图
  2. java arraylist 对象 删除_ArrayList实现删除重复元素(元素不是对象类型的情况)...
  3. k8s kubesphere进入ks-installer容器删除istio并重启ks-installer命令
  4. 软件项目组织管理(五)项目范围管理
  5. 华为Mate 40 Pro正面细节曝光:3D人脸识别+双孔曲面屏
  6. 数据迁移的应用场景与解决方案Hamal
  7. java遍历map集合传值,Java之五种遍历Map集合的方式
  8. pytest执行时,报report.html错误
  9. win7系统无法正常启动
  10. idea光标移至行尾快捷键——End键不能移至行尾的解决办法
  11. 升级 Adobe CS5 中的 FlashBuilder 4
  12. 区块链学习笔记(3)--交易机制与双花
  13. python游戏编程
  14. js Web APIs
  15. 天河二号超级计算机能买到吗,天河二号计算机是巨型机吗
  16. 深入理解JVM:晚期(运行期)优化
  17. 从零开始的Nginx详解(2)【Nginx-HTTP服务器】
  18. 华为 中兴 海康嵌入式软件工程师面试题
  19. 机器人中的xyz坐标系和右手定则
  20. 西门子PLC中的高地址,低字节如何理解?

热门文章

  1. 简单理解--java反射(面试必备)
  2. 2020Java初级面试题一数据库
  3. JIT生产方式的目标和方法体系(zt)
  4. 随机森林特征个数mtry matlab,基于随机森林的特征选择算法
  5. kindeditor富文本编译器
  6. 华夏历史人物之「王阳明」
  7. 如何使用ODX描述诊断会话和安全等级
  8. 基于节能减排理念的校园电气设计研究
  9. 30天投放博主近100+,超越咖啡行业巨头品牌,三顿半有何营销妙计
  10. 帮助 Java 开发人员进行 Bean 映射的 8 大框架