Android为应用程序提供了许多种类的存储来存储数据。这些存储位置是共享首选项,内部和外部存储,SQLite存储和通过网络连接的存储。
在本章中,我们将介绍内部存储。内部存储器是将专用数据存储在设备存储器上。
默认情况下,这些文件是私有的,只有您的应用程序访问,并在用户删除应用程序时被删除。
写文件
为了使用内部存储在文件中写入一些数据,请使用文件的名称和模式调用openFileOutput()方法。该模式可以是private,public等。其语法如下:
FileOutputStreamfOut=openFileOutput("file name here",MODE_WORLD_READABLE);
方法openFileOutput()返回一个FileOutputStream的实例。所以你收到它在FileInputStream的对象。之后,您可以调用write方法在文件上写入数据。其语法如下:
Stringstr="data";fOut.write(str.getBytes());fOut.close();
阅读文件
为了从刚才创建的文件读取,请使用文件名称调用openFileInput()方法。它返回一个FileInputStream的实例。其语法如下:
FileInputStreamfin=openFileInput(file);
之后,您可以调用read方法从文件中一次读取一个字符,然后可以打印。其语法如下:
intc;Stringtemp="";while((c=fin.read())!=-1){temp=temp+Character.toString((char)c);}//string temp contains all the data of the file.fin.close();
除了写入和关闭的方法外,还有FileOutputStream类提供的其他方法可以更好地编写文件。这些方法如下:
没有
方法和描述
1
FileOutputStream(File file,boolean append)
This method constructs a new FileOutputStream that writes to file.
2
getChannel()
This method returns a write-only FileChannel that shares its position with this stream
3
getFD()
This method returns the underlying file descriptor
4
write(byte[] buffer, int byteOffset, int byteCount)
This method Writes count bytes from the byte array buffer starting at position offset to this stream
Apart from the the methods of read and close, there are other methods provided by the FileInputStream class for better reading files. These methods are listed below −
Sr.No
Method & description
1
available()
This method returns an estimated number of bytes that can be read or skipped without blocking for more input
2
getChannel()
This method returns a read-only FileChannel that shares its position with this stream
3
getFD()
This method returns the underlying file descriptor
4
read(byte[] buffer, int byteOffset, int byteCount)
该方法从该流读取最多长度的字节,并将它们存储在从偏移开始的字节数组b中
例
以下是一个示例,说明使用内部存储来存储和读取文件。它创建一个基本的存储应用程序,允许您从内部存储器读写。
要实验这个例子,你可以在一个实际的设备或一个模拟器中运行这个例子。
脚步
描述
1
您将使用Android Studio IDE在com.example.sairamkrishna.myapplication软件包下创建一个Android应用程序。
2
修改src / MainActivity.java文件以添加必要的代码。
3
修改res / layout / activity_main以添加相应的XML组件
4
运行应用程序并选择一个正在运行的Android设备并在其上安装应用程序并验证结果
以下是修改后的主要活动文件src / MainActivity.java的内容。
packagecom.example.sairamkrishna.myapplication;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;importandroid.widget.Toast;importjava.io.FileInputStream;importjava.io.FileOutputStream;publicclassMainActivityextendsActivity{Buttonb1,b2;TextViewtv;EditTexted1;Stringdata;privateStringfile="mydata";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);b1=(Button)findViewById(R.id.button);b2=(Button)findViewById(R.id.button2);ed1=(EditText)findViewById(R.id.editText);tv=(TextView)findViewById(R.id.textView2);b1.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){data=ed1.getText().toString();try{FileOutputStreamfOut=openFileOutput(file,MODE_WORLD_READABLE);fOut.write(data.getBytes());fOut.close();Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();}catch(Exceptione){// TODO Auto-generated catch blocke.printStackTrace();}}});b2.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){try{FileInputStreamfin=openFileInput(file);intc;Stringtemp="";while((c=fin.read())!=-1){temp=temp+Character.toString((char)c);}tv.setText(temp);Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();}catch(Exceptione){}}});}}
以下是xmlres / layout / activity_main.xml的修改内容。
在以下代码中,abc表示vue5.com的标志
以下是res / values / string.xml的内容。
My Application
以下是AndroidManifest.xml文件的内容。
我们尝试运行我们刚刚修改的Storage应用程序。我假设你在做环境设置时创建了AVD。要从Android studio运行应用程序,请打开一个项目的活动文件,然后
从工具栏中单击运行图标。Android工作室在您的AVD上安装应用程序并启动它,如果您的设置和应用程序的一切都很好,它将显示以下仿真器窗口 -
现在你需要做的是输入任何字段中的文本。例如,我已经输入了一些文本。按保存按钮。AVD中会出现以下通知:
现在当您按下加载按钮时,应用程序将读取文件并显示数据。在我们的情况下,将返回以下数据 -
注意,您可以通过切换到DDMS选项卡实际查看此文件。在DDMS中,选择文件浏览器并浏览此路径。
tools>android>android device Monitor
这也在下面的图片中显示。