搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
IT小白
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
2023年6月中国数据库排行榜:OceanBase 连续七月踞榜首,华为阿里谋定快动占先机
2
Android Studio 学习记录-按钮控件(Button)_android studio button
3
LeetCode刷题笔记
4
计算机专业游戏本推荐,十大高性价比游戏本(小虫2021年6月游戏本排行榜)
5
2022届秋招,从被拒到上岸 | 谈谈YK菌在2021年的经历与收获_不好好学习被sp
6
Spring Boot的启动方法_maven启动springboot项目
7
Vue登录界面精美模板分享_vue精美登录页面
8
什么是HMAC身份验证,为什么有用?
9
AI数字人克隆系统源代码克隆系统开发--本地源码部署
10
想用ChatGPT搞钱,推荐看看这10本书
当前位置:
article
> 正文
Android内部文件的读取和写入
作者:IT小白 | 2024-03-26 19:50:07
赞
踩
Android内部文件的读取和写入
Android 文件管理方法
Android使用的是基于Linux的文件系统,对于文件的访问和管理是通过权限设置来限制的.
在Linux系统中,文件权限分别描述了创建者、同组用户和其他用户对文件的操作限制。
x表示可执行,r表示可读,w表示可写,d表示目录,-表示普通文件。
产生这样的文件权限与程序人员设定的
Android 存储文件的类型
(内部存储)程序开发人员可以建立和访问程序自身的私有文件;
(资源存储)可以访问保存在资源目录中的原始文件和XML文件;
(外部存储)可以在SD卡等外部存储设备中保存文件
Android系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,在Linux系统下的/data/data//files目录中
Android系统不仅支持标准Java的IO类和方法,还提供了能够简化读写流式文件过程的函数
FileOutputStream openFileOutput(String filename int mode)
FileInputStream openFileInput(String filename)
参数文件不允许包含描述路径的斜杠(其存储位置固定)
访问模式
:
MODE_PRIVATE 私有模式,缺陷模式,文件仅能够被文件创建程序访问,或具有相同UID的程序访问
。
MODE_APPEND 追加模式,如果文件已经存在,则在文件的结尾处添加新数据。
MODE_WORLD_READABLE 全局读模式,允许任何程序读取私有文件。
MODE_WORLD_WRITEABLE 全局写模式,允许任何程序写入私有文件。
三个基本的读方法
abstract int read() :读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。
int read(byte[] b) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。
int read(byte[] b, int off, int len) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。
其它方法
long skip(long n) :在输入流中跳过n个字节,并返回实际跳过的字节数。
int available() :返回在不发生阻塞的情况下,可读取的字节数。
void close() :关闭输入流,释放和这个流相关的系统资源。
void mark(int readlimit) :在输入流的当前位置放置一个标记,如果读取的字节数多于readlimit设置的值,则流忽略这个标记。
void reset() :返回到上一个标记。
boolean markSupported() :测试当前流是否支持mark和reset方法。如果支持,返回true,否则返回false。
三个基本的写方法
abstract void write(int b) :往输出流中写入一个字节。
void write(byte[] b) :往输出流中写入数组b中的所有字节。
void write(byte[] b, int off, int len) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。
其它方法
void flush() :刷新输出流,强制缓冲区中的输出字节被写出。
void close() :关闭输出流,释放和这个流相关的系统资源。
对文件和流的操作容易引发异常,所以必须要用try-catch语句
主要核心代码
首先是新建一个文件
private final String FILE_NAME = "Myfile01.txt";
写文件
FileOutputStream fos = null;//声明一个全局变量
//注意下面的语句要进行抛异常处理FileNotFoundException e,IOException e
fos = openFileOutput(FILE_NAME,Context.MODE_PRIVATE);//写流式文件过程的
函数,这里的权限是私有的
String text = entryText.getText().toString();//把输入的内容转化为字符串
fos.write(text.getBytes());//把转化为字符串的内容转化为字节,然后写入
//下面语句写在finally里面
fos.flush();//把缓存里的内容写入到文件
fos.close();//关闭流
读文件
FileInputStream fis = null;//定义一个全局变量
fis = openFileInput(FILE_NAME);//打开要读取的文件
if (fis.available() == 0){//判断文件是否为空,为空就直接返回
return;
}
byte[] readBytes = new byte[fis.available()];//把文件里的内容转化为字节
while(fis.read(readBytes) != -1){//读文件,直到读到最后
}
String text = new String(readBytes);//把读到的字节转化为字符串
复制代码
读文件的第二种方法
String path = "/data/data/cn.itcast.file/files/writeable.txt";//得到文件路径
File file = new File(path);//创建一个文件对象
FileInputStream inStream = new FileInputStream(file);//读文件
byte[] buffer = new byte[1024];//缓存
int len = 0;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
while( (len = inStream.read(buffer))!= -1){//直到读到文件结束
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();//得到文件的二进制数据
outStream.close();
inStream.close();
Log.i(TAG, new String(data));
复制代码
这里列举一个例子,主要是把写入的文件读出来显示在TextView中
第一步,修改布局文件main.xml
View Code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<EditText android:id="@+id/entry"
android:text="输入文件内容"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:id="@+id/write"
android:text="写入文件"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<Button android:id="@+id/read"
android:text="读取文件"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
<CheckBox android:id="@+id/append"
android:text="追加模式"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</CheckBox>
<TextView android:id="@+id/display"
android:text="文件内容显示区域"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:textColor="#000000" >
</TextView>
</LinearLayout>
复制代码
第二步:写入核心代码,
View Code
package cn.edu.zwu.tel;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
public class FileSaveTest01Activity extends Activity {
private final String FILE_NAME = "Myfile01.txt";
private TextView labelView;
private TextView displayView;
private CheckBox appendBox ;
private EditText entryText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
labelView = (TextView)findViewById(R.id.label);
displayView = (TextView)findViewById(R.id.display);
appendBox = (CheckBox)findViewById(R.id.append);
entryText = (EditText)findViewById(R.id.entry);
Button writeButton = (Button)findViewById(R.id.write);
Button readButton = (Button)findViewById(R.id.read);
writeButton.setOnClickListener(writeButtonListener);
readButton.setOnClickListener(readButtonListener);
entryText.selectAll();
entryText.findFocus();
}
OnClickListener writeButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
FileOutputStream fos = null;
try {
if (appendBox.isChecked()){
fos = openFileOutput(FILE_NAME,Context.MODE_APPEND);
}
else {
fos = openFileOutput(FILE_NAME,Context.MODE_PRIVATE);
}
String text = entryText.getText().toString();
fos.write(text.getBytes());
labelView.setText("文件写入成功,写入长度:"+text.length());
entryText.setText("");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally{
if (fos != null){
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
};
OnClickListener readButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
displayView.setText("");
FileInputStream fis = null;
try {
fis = openFileInput(FILE_NAME);
if (fis.available() == 0){
return;
}
byte[] readBytes = new byte[fis.available()];
while(fis.read(readBytes) != -1){
}
String text = new String(readBytes);
displayView.setText(text);
labelView.setText("文件读取成功,文件长度:"+text.length());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
};
}
复制代码
效果图:
原文链接:
http://www.cnblogs.com/shaoyangjiang/archive/2012/03/09/2388150.html
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/IT小白/article/detail/319306
推荐阅读
article
Android
.mk 编译报错
undefined
reference
to
_
undefined
re...
当出现
undefined
reference
to
xxx时,对应的lib库已经添加到LOCAL_STATIC_LIB...
赞
踩
article
Android
带
html
标签文本添加自定义
超链接
跳转
...
这里主要做了一个简单的封装,关键点在于重写的onCLick方法,它的方法中则可以修改
超链接
的一些属性,比如字体颜色,下划...
赞
踩
article
Android
宠物
连连看
案例
_
仿动物
连连看
游戏界面使用
linearlayout
布局通过
案例
来演示...
[详细]
-->
赞
踩
article
毕业设计
-基于
Android
的
校园
新闻
APP(
Android
studio
毕业设计
,
Android
课...
2:
校园
新闻
:本模块主要是介绍在本校的网站上面关于
校园
新闻
的介绍,而本部分所针对的对象是所有人(包括了未登录的游客),用...
赞
踩
article
Android 13.0
kenel
和f
ram
eworks中
修改
ram
运行
内存
的功能实现...
在13.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,在产品后续订单中,产品提出要提高硬件配置,但是硬...
赞
踩
article
Android
Studio
实现
图书馆
订座
系统_
androidstudio
图书馆
选
座位
app源码...
在校园生活中,
图书馆
是很多人选择的学习圣地,这里不仅充满书香气息,而且还十分静谧。这样的学习环境,必然会很抢手,导致很多...
赞
踩
article
Android
开源
组件
和
第三方
库
汇总
_
android
组件
汇总
网站...
Android
开源
组件
和
第三方
库
汇总
转载1、 github排名 https://github.com/trending...
赞
踩
article
Android
UI
框架之 X
UI
...
TextView、Button、EditText、ImageView、Spinner、Picker、Dialog、Pop...
赞
踩
article
Android
常用
的
UI 控件 和 对应
的
方法详细总结
_
android
seekbar
两头间距...
设计和代码切换,一般情况下,我们 UI 布局都是先拖再细调整,也就是先用设计默认拖出一个大概
的
布局,然后用代码来微调一、...
赞
踩
article
Android
ConstraintLayout
使用详解...
Android
ConstraintLayout
使用详解_android constraintlayoutandroi...
赞
踩
article
Android
ConstraintLayout
用法全解析...
ConstraintLayout
用法全解析文章目录
ConstraintLayout
用法全解析前言一、 什么是Cons...
赞
踩
article
腾讯
开源
的
Android
UI
框架——
QM
UI
Android
...
各位同学,早上好,我是你们的老朋友D_clock爱吃葱花,前些天忙着发版本,最近也在看各种各样的新知识,有好多东西想写啊...
赞
踩
article
android
studio
for
Mac
关于华为
手机
的真机
连接
_mac
android
stu...
android
studio
for
Mac
关于华为
手机
的真机
连接
step one:需要确保
手机
的Android版本不...
赞
踩
article
Android
Studio
WiFi
连接手机_
android
studio
wifi
连接华为鸿蒙...
使用一个插件即可,插件下载地址https://plugins.jetbrains.com/plugin/7983或者ht...
赞
踩
article
Android
UI
_androidui 框架...
Android
UI
框架 Activity、Fragment封装,支持状态栏修改、快速设置标题栏、设置空视图、内含轮播、...
赞
踩
article
Android
UI
框架概览...
Android
App真实的逻辑构成App
UI
构成层级结构在
Android
中绝大部分的
UI
组件都是存放在android...
赞
踩
article
MacOS
+
Android
Studio
通过 USB 数据线真机调试_
mac
版
android
...
MacOS
+
Android
Studio
通过 USB 数据线真机调试_
mac
版
android
studio
怎么与手...
赞
踩
article
Android
UI
框架
Android
UI
控件类简介
android5
大
布局
详解...
线性
布局
管理器(LinearLayout):点击打开链接表格
布局
管理器(TableLayout):点击打开链接帧
布局
管理...
赞
踩
article
Android
Studio
中创建
Android
虚拟机
并使用
虚拟机
调试HarmonyOS_andro...
在
Android
Studio
的工具栏中,选择您的虚拟设备作为目标设备,并点击"Run"(运行)按钮。通过按照以上步骤,...
赞
踩
article
android
studio
设备
调试
及
Logcat
查看_
android
studio
调试
时不跳转...
本文转载自:https://www.cnblogs.com/apaojun/p/4283944.html 作者:apao...
赞
踩
相关标签
android
Android.mk
html
前端
android-studio
java
开发语言
rom内存修改
运行内存
系统运行内存
mem
android studio
安卓app
课程设计
订座系统
Android
开源框架
ui