文件存储案例

news2024/12/25 12:20:05

1.文件存储-File文件存储案例

1.1.案例要求

1.2参考代码

文件读取

百度安全验证

  • 文件最终的保存的目录在/data/data/user/0/包/files下

(1)布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FileIODemoActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请输入文件名"
        android:textSize="25dp"
        />
    <EditText
        android:id="@+id/filename"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入文件名"
        android:textSize="25dp"
        android:maxLines="1"
        android:inputType="text"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请输入文件内容"
        android:textSize="25dp"
        />
    <EditText
        android:id="@+id/filedesc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
            android:hint="请输入文件内容"
        android:textSize="25dp"
        android:maxLines="3"
        android:inputType="text"
        />

    <Button
        android:id="@+id/btn_write"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="写入"
        />
    <Button
        android:id="@+id/btn_read"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取"
        />
    <EditText
        android:id="@+id/fileread"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="读取的的文件内容"
        android:textSize="30dp"

        />

</LinearLayout>

(2)Java代码

//文件存储
public class FileIODemoActivity extends AppCompatActivity {
    EditText filename,filedesc,fileread;
    Button btn_write,btn_read;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_iodemo);
        initView();

    }
    public void initView(){
        filename=findViewById(R.id.filename);
        filedesc=findViewById(R.id.filedesc);
        fileread=findViewById(R.id.fileread);
        btn_write=findViewById(R.id.btn_write);
        btn_read=findViewById(R.id.btn_read);

        //写入文件信息
    btn_write.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View view) {
            String f_name = filename.getText().toString();
            //f_name.indexOf(".")==f_name.lastIndexOf(".")保证文件只有一个.
            if (f_name.endsWith(".txt")&&f_name.indexOf(".")==f_name.lastIndexOf(".")){
                Toast.makeText(FileIODemoActivity.this, ""+f_name, Toast.LENGTH_SHORT).show();
                try {
                    FileOutputStream out= getApplicationContext().openFileOutput(f_name,MODE_PRIVATE+MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE);
                    String content=filedesc.getText().toString();
                    out.write(content.getBytes(StandardCharsets.UTF_8));
                    out.close();

                } catch (FileNotFoundException e) {
                    Toast.makeText(FileIODemoActivity.this, "文件创建错误!", Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                    Toast.makeText(FileIODemoActivity.this, "发生写入错误!", Toast.LENGTH_SHORT).show();
                }
            }
            else {
                Toast.makeText(FileIODemoActivity.this, "请输入以.txt为结尾的文件名", Toast.LENGTH_SHORT).show();
            }

          }


        });
    //读取文件信息
    btn_read.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String f_name = filename.getText().toString();
            if (f_name.endsWith(".txt")&&f_name.indexOf(".")==f_name.lastIndexOf(".")){
                try {
                    FileInputStream inputStream= openFileInput("hello.txt");
                    byte[] buf=new byte[inputStream.available()];
                    inputStream.read(buf);
                    fileread.setText(new String(buf));
                } catch (FileNotFoundException e) {
                    Toast.makeText(getApplicationContext(),"文件不存在",Toast.LENGTH_SHORT);
                } catch (IOException e) {
                    Toast.makeText(getApplicationContext(),"创建缓冲区失败!",Toast.LENGTH_SHORT);
                }

            }
            Toast.makeText(getApplicationContext(),"请输入以.txt为结尾的文件名",Toast.LENGTH_SHORT);
        }
    });
    }
}

(3)效果图

图1 效果图

图2 写入内容

图3 读取文件内容

2.文件存储-SD卡存储案例

2.1SD卡存储案例要求

要求:将文件及文件内容写入SD卡,并读取SD卡对应文件的内容。

注意:在android6.0及以上版本需要手动赋权限

1、在AndroidManifest.xml中添加SD权限,即:创建删除文件权限和写入数据权限。

2、模拟器上要释放应用程序的存储权限。

在设置(Setting)里-应用(Apps)—找到应用程序名-权限(permissions)-右上角

2.2SD卡读写步骤

1.========AndroidManifest中放开读写权限:创建、删除和写入的权限
<!-- 在SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.========先判断SD卡是不是插入进去了,插入进去了并且可以读写
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
3.=====获取SD卡的外部目录,同时获取SD卡的路径
Environment.getExternalStorageDirectory().getCanonicalPath()+"/"+fileName
4.使用FileOutputStream,FileInputStream或者FileReader或FileWriter读写SD卡中的文件

2.3参考代码

(1)开启权限

1)AndroidManifest下开启权限

    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
        tools:ignore="ProtectedPermissions" />
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2)开启存储空间读写权限。

(2)布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SDCardTestActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SD卡文件存储"
        android:gravity="center"
        android:textColor="@color/black"
        android:textSize="30dp"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请输入文件名"
        android:textSize="25dp"
        />
    <EditText
        android:id="@+id/sdfilename"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入文件名"
        android:textSize="25dp"
        android:maxLines="1"
        android:inputType="text"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请输入文件内容"
        android:textSize="25dp"
        />
    <EditText
        android:id="@+id/sdfiledesc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入文件内容"
        android:textSize="25dp"
        android:maxLines="3"
        android:inputType="text"
        />

    <Button
        android:id="@+id/sdbtn_write"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="写入"
        />
    <Button
        android:id="@+id/sdbtn_read"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取"
        />
    <EditText
        android:id="@+id/sdfileread"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="读取的的文件内容"
        android:textSize="30dp"

        />

</LinearLayout>

(3)Java代码

//SD卡的测试
public class SDCardTestActivity extends AppCompatActivity {
    EditText sdfilename,sdfiledesc,sdfileread;
    Button sdbtn_write,sdbtn_read;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sdcard_test);
        initView();
    }

    public void initView(){
        sdfilename=findViewById(R.id.sdfilename);
        sdfiledesc=findViewById(R.id.sdfiledesc);
        sdfileread=findViewById(R.id.sdfileread);
        sdbtn_write=findViewById(R.id.sdbtn_write);
        sdbtn_read=findViewById(R.id.sdbtn_read);

    // 写入文件信息
    sdbtn_write.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View view) {
            String f_name = sdfilename.getText().toString();
            // f_name.indexOf(".")==f_name.lastIndexOf(".")保证文件只有一个.
            if (f_name.endsWith(".txt") && f_name.indexOf(".") == f_name.lastIndexOf(".")) {
              Toast.makeText(getApplicationContext(), "文件格式正确!" + f_name, Toast.LENGTH_SHORT).show();
              try {
                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                  File file = Environment.getExternalStorageDirectory();
                  //创建一个个人文件夹
                  File myFile = new File(file, "myFile");
                  if (!myFile.exists()) {
                    myFile.mkdir();
                  }
                  //创建要保存的文件
                  File mytxt = new File(myFile, f_name);
                  FileOutputStream out = new FileOutputStream(mytxt);
                  String content = sdfiledesc.getText().toString();
                  //写入
                  out.write(content.getBytes(StandardCharsets.UTF_8));
                  out.close();
                  Toast.makeText(SDCardTestActivity.this, "写入成功!", Toast.LENGTH_SHORT).show();
                }
                  Toast.makeText(getApplicationContext(),"存储卡获取失败!",Toast.LENGTH_SHORT);

              }
              catch (FileNotFoundException e) {
                  Toast.makeText(getApplicationContext(), "文件创建错误!", Toast.LENGTH_SHORT).show();
              } catch (IOException e) {
                  Toast.makeText(getApplicationContext(), "发生写入错误!", Toast.LENGTH_SHORT).show();
              }
            } else {
                Toast.makeText(getApplicationContext(), "请输入以.txt为结尾的文件名", Toast.LENGTH_SHORT).show();

            }
          }
        });
    // 读取文件信息
    sdbtn_read.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View view) {
            String f_name = sdfilename.getText().toString();
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
              if (f_name.endsWith(".txt") && f_name.indexOf(".") == f_name.lastIndexOf(".")) {
                try {
                  /// storage/emulated/0
                  // 注意路径拼接是否正确
                  // File file=new
                  // File(Environment.getExternalStorageDirectory().getCanonicalPath()+"/myFile/"+f_name);或者是采用下面的方式
                  File file =
                      new File(
                          Environment.getExternalStorageDirectory().getCanonicalPath() + "/myFile",
                          f_name);
                  FileInputStream inputStream = new FileInputStream(file);
                  byte[] buf = new byte[inputStream.available()];
                  inputStream.read(buf);
                  sdfileread.setText(new String(buf));
                  Toast.makeText(SDCardTestActivity.this, "读取成功", Toast.LENGTH_SHORT).show();
                } catch (FileNotFoundException e) {
                  Toast.makeText(getApplicationContext(), "文件不存在", Toast.LENGTH_SHORT);
                } catch (IOException e) {
                  Toast.makeText(getApplicationContext(), "创建缓冲区失败!", Toast.LENGTH_SHORT);
                }
              }
              Toast.makeText(getApplicationContext(), "请输入以.txt为结尾的文件名", Toast.LENGTH_SHORT);
            }
            Toast.makeText(getApplicationContext(), "存储卡获取失败!", Toast.LENGTH_SHORT);
          }
        });
    }
}

图1 启动效果图

图2 写入成功

图3 读取成功

图4 读取内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes中使用Service反向代理外部服务

当我们的某个服务在外部集群的时候&#xff0c;但是又想k8s集群内的应用连接它&#xff0c;这是可以创建一个service&#xff0c;用service代理外部服务&#xff0c;然后集群内就能连接该service&#xff0c;从而间接的访问外部服务。 创建一个service代理外部的服务 创建一个…

代码挑战画 魔法圣诞树

一、前言 本文会基于C# GDI技术 从零到一 实现一颗 魔法圣诞树&#xff01;源码和素材在文末全部都有&#xff01; 二、魔法圣诞树 对于用代码画圣诞树&#xff0c;网上各种编程语言像python、css、java、c/c我们都有见到过了&#xff0c;那么在绘图方面&#xff0c;还有一位…

FastDDS(6)核心库综述

Fast DDS(前身为Fast RTPS)是DDS规范的高效高性能实现,DDS规范是一种用于分布式应用软件的以数据为中心的通信中间件(DCPS)。本次回顾Fast DDS的体系结构、操作和关键特性。 架构 Fast DDS的架构如下图所示,其中可以看到具有以下不同环境的层模型。 Application layer应…

人员工装未穿戴识别检测 opencv

人员工装未穿戴识别检测基于OpenCvyolo计算机视觉深度学习技术对现场画面中人员行为着装穿戴实时监测识别&#xff0c;发现不按要求着装违规行为立即抓拍存档同步后台。OpenCV-Python使用Numpy&#xff0c;这是一个高度优化的数据库操作库&#xff0c;具有MATLAB风格的语法。所…

RabbitMQ 第一天 基础 1 MQ的基本概念 1.4 MQ 的劣势 1.5 常见的MQ 产品

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础1 MQ的基本概念1.4 MQ 的劣势1.4.1 MQ 的劣势1.4.2 小结1.5 常见的MQ 产品第一天 基础 1 MQ的基本概念 1.4 MQ 的劣势 1.4.1 MQ 的劣势 从远程调用 到 利用 MQ 作…

css实现九宫格

首先是实现九宫格的样式&#xff0c;对每一行进行偏移&#xff0c;当鼠标放上去会使他们形成一张图片。 html <div class"img_container"><div class"img1"></div><div class"img1"></div><div class"i…

2022年,来者犹可追

始料未及的是&#xff0c; 疫情持续到了2022年。好在“大疫不过三年”&#xff0c;只不过是结束来的同样措不及防&#xff0c;全家的一次高烧免疫&#xff0c;没有朋友圈中的云淡风轻&#xff0c;冷暖自知&#xff0c;希望明年能够拥有平安喜乐的时光。回首这一年&#xff0c;“…

kotlin与java实现混编基础看这篇就够了

前几年一直关注安卓&#xff0c;想换个方向&#xff0c;奔着移动端大步向前&#xff0c;由于比较懒就一直停留在想法&#xff0c;这不今天勤快点&#xff0c;动手搞了一个基础的java和kotlin混编&#xff0c;和大家总结分享一下。 首先需要了解什么事kotlin&#xff0c;kotlin…

如何使用腾讯云轻量应用服务器挂载 CFS 文件系统

文件存储&#xff08;Cloud File Storage&#xff0c;CFS&#xff09;提供了可扩展的共享文件存储服务&#xff0c;可与腾讯云云服务器 、容器、批量计算、轻量应用服务器等服务搭配使用。CFS 提供了标准的 NFS 及 CIFS/SMB 文件系统访问协议&#xff0c;可为计算服务提供共享的…

【Unity】【Pico】手柄摇杆控制第一人称移动和旋转

【Unity】【Pico】手柄摇杆控制第一人称移动和旋转 背景&#xff1a;开发影院系统 环境&#xff1a;Unity2021.3、PicoNeo3ProEye 描述&#xff1a;已经在Unity项目中实现第一人称WASD移动和鼠标旋转&#xff08;代码见我的其他博文&#xff09; 需求&#xff1a;希望项目在Pi…

Cobalt Strike Beacon 初探

背景 RTO I 的课程结束了&#xff0c;Cobalt Strike 算是会用了。然后继上一篇文章之后&#xff0c;我还没有机会用 Cobalt Strike Beacon 做一下 Windows Defender Bypass。之后会写。 另外&#xff0c;我也想问一下我自己&#xff0c;Cobalt Strike 里面最基本的 payload -…

Springboot+Netty实现基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-应用订阅端(北向应用)

之前实现了使用SpringbootNetty基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-设备终端&#xff08;南向设备&#xff09;&#xff0c;模拟设备发送的数据给到了AIOT平台&#xff0c;那么在第三方应用也需要去订阅AIOT平台的数据&#xff0c;以及对设备进行下发指令(消…

FastGithub的下载和使用

前言 github访问很不稳定&#xff0c;时断时续&#xff0c;有时候根本打不开&#xff01; 下载 方式一&#xff1a;官方地址下载&#xff08;有及时更新&#xff09; FastGithub1.1.7下载、FastGithub2.1.4_windows、FastGithub2.1.4_Linux、 更多 方式二&#xff1a;本地上传…

[编程语言][C++][Qt]单独添加UI文件

单独添加UI文件问题描述解决方案1. 添加UI文件2. 与对应的界面类进行关联3. 修改UI文件4. 设置界面类读取UI文件总结问题描述 不知什么原因&#xff0c;Qt Creator并不是很完美很智能。当先写好界面类的头文件和源代码文件后&#xff0c;我们再添加用于可视化界面设计的UI文件…

美国顶级在线教育平台泄露22TB数据

©网络研究院 事件发生时&#xff0c;属于美国“三大”教育出版商之一的麦格劳希尔教育(McGraw Hill) 的两个配置错误的 AWS S3 存储桶在没有任何安全认证的情况下暴露在外。 vpnMentor 的网络安全研究人员发现了几个配置错误的 Amazon Web Services (AWS) S3 存储桶&…

RV1126笔记二十一:车辆颜色识别

若该文为原创文章,转载请注明原文出处。 一、介绍 在学习RV1126的过程中,测试了yolov5可以实现物体检测,物体目标识别等功能,Rock-X也自带了车牌识别功能,具体可以了解下正点原子的资料,里面有详细的介绍,这里介绍一个如何识别车辆颜色。只是提供一个思路,效果不是很…

RabbitMQ 第一天 基础 4 RabbitMQ 的工作模式 4.4 Topic 通配符模式 4.5 工作模式总结

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础4 RabbitMQ 的工作模式4.4 Topic 通配符模式4.4.1 模式说明4.4.2 代码编写4.4.3 小结4.5 工作模式总结第一天 基础 4 RabbitMQ 的工作模式 4.4 Topic 通配符模式 …

人工智能期末复习:人工神经网络(详细笔记和练习题)

文章目录1.概述2.基本单元-神经元3.激活函数3.1.阶跃函数3.2.Sigmoid函数3.3.TanH函数3.4.ReLU函数3.5.Softplus函数4.多层前馈神经网络5.损失函数5.1.均方误差5.2.交叉熵6.调参方法6.1.梯度下降法1.概述 神经网络定义&#xff1a;神经网络是具有适应性的简单单元组成的广泛并…

vue3 ant design vue——修改table表格的默认样式(css样式穿透)(一)调整table表格每行(row)行高过高问题

vue3 antd项目实战——修改ant design vue table组件的默认样式&#xff08;调整每行行高&#xff09;知识调用场景复现实际操作解决a-table表格padding过宽知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vue组件库引入】css样式穿透&#xff08;…

基于 Traefik 的 ForwardAuth 配置

前言 Traefik 是一个现代的 HTTP 反向代理和负载均衡器&#xff0c;使部署微服务变得容易。 Traefik 可以与现有的多种基础设施组件&#xff08;Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS...&#xff09;集成&#xff0c;并自动和动态地…