无涯教程-Android - Internal Storage

69 阅读2分钟

无涯教程能够从设备内部存储器中保存或读取数据。 FileInputStream和FileOutputStream类用于读取和写入文件。

在这里,无涯教程将读取和写入设备的内部存储数据。

读写内部存储示例

从面板上拖动2个edittexts,2个textviews和2个按钮,现在activity_main.xml文件将如下所示:

File: activity_main.xml
<relativelayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">
    <edittext android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:layout_marginright="20dp" android:layout_margintop="24dp" android:ems="10">
        <requestfocus></requestfocus>
    </edittext>
    <edittext android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignright="@+id/editText1" android:layout_below="@+id/editText1" android:layout_margintop="24dp" android:ems="10"></edittext>
    <textview android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/editText1" android:layout_alignbottom="@+id/editText1" android:layout_alignparentleft="true" android:text="File Name:"></textview>
    <textview android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/editText2" android:layout_alignbottom="@+id/editText2" android:layout_alignparentleft="true" android:text="Data:"></textview>
    <button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignleft="@+id/editText2" android:layout_below="@+id/editText2" android:layout_marginleft="70dp" android:layout_margintop="16dp" android:text="save"></button>
    <button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/button1" android:layout_alignbottom="@+id/button1" android:layout_torightof="@+id/button1" android:text="read"></button>
</relativelayout>

让无涯教程编写代码来写入和读取内部存储的数据。

File: MainActivity.java
package example.learnfk.com.internalstorage;

import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;

import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity { EditText editTextFileName,editTextData; Button saveButton,readButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

    editTextFileName</span><span class="pun">=</span><span class="pln">findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">editText1</span><span class="pun">);</span><span class="pln">
    editTextData</span><span class="pun">=</span><span class="pln">findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">editText2</span><span class="pun">);</span><span class="pln">
    saveButton</span><span class="pun">=</span><span class="pln">findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">button1</span><span class="pun">);</span><span class="pln">
    readButton</span><span class="pun">=</span><span class="pln">findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">button2</span><span class="pun">);</span><span class="pln">

    </span><span class="com">//对读取按钮执行操作</span><span class="pln">
    saveButton</span><span class="pun">.</span><span class="pln">setOnClickListener</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">View</span><span class="pun">.</span><span class="typ">OnClickListener</span><span class="pun">(){</span><span class="pln">

        </span><span class="lit">@Override</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onClick</span><span class="pun">(</span><span class="typ">View</span><span class="pln"> arg0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            </span><span class="typ">String</span><span class="pln"> filename</span><span class="pun">=</span><span class="pln">editTextFileName</span><span class="pun">.</span><span class="pln">getText</span><span class="pun">().</span><span class="pln">toString</span><span class="pun">();</span><span class="pln">
            </span><span class="typ">String</span><span class="pln"> data</span><span class="pun">=</span><span class="pln">editTextData</span><span class="pun">.</span><span class="pln">getText</span><span class="pun">().</span><span class="pln">toString</span><span class="pun">();</span><span class="pln">

            </span><span class="typ">FileOutputStream</span><span class="pln"> fos</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                fos </span><span class="pun">=</span><span class="pln"> openFileOutput</span><span class="pun">(</span><span class="pln">filename</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Context</span><span class="pun">.</span><span class="pln">MODE_PRIVATE</span><span class="pun">);</span><span class="pln">
                </span><span class="com">//默认模式是 PRIVATE,可以是 APPEND 等。</span><span class="pln">
                fos</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">data</span><span class="pun">.</span><span class="pln">getBytes</span><span class="pun">());</span><span class="pln">
                fos</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span><span class="pln">

                </span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">makeText</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">(),</span><span class="pln">filename </span><span class="pun">+</span><span class="pln"> </span><span class="str">" saved"</span><span class="pun">,</span><span class="pln">
                        </span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">LENGTH_LONG</span><span class="pun">).</span><span class="pln">show</span><span class="pun">();</span><span class="pln">


            </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">FileNotFoundException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();}</span><span class="pln">
            </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">IOException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();}</span><span class="pln">

        </span><span class="pun">}</span><span class="pln">

    </span><span class="pun">});</span><span class="pln">

    </span><span class="com">//对读取按钮执行操作</span><span class="pln">
    readButton</span><span class="pun">.</span><span class="pln">setOnClickListener</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">View</span><span class="pun">.</span><span class="typ">OnClickListener</span><span class="pun">(){</span><span class="pln">

        </span><span class="lit">@Override</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onClick</span><span class="pun">(</span><span class="typ">View</span><span class="pln"> arg0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            </span><span class="typ">String</span><span class="pln"> filename</span><span class="pun">=</span><span class="pln">editTextFileName</span><span class="pun">.</span><span class="pln">getText</span><span class="pun">().</span><span class="pln">toString</span><span class="pun">();</span><span class="pln">
            </span><span class="typ">StringBuffer</span><span class="pln"> stringBuffer </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">StringBuffer</span><span class="pun">();</span><span class="pln">
            </span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                </span><span class="com">//借助 InputStreamReader 将 BufferedReader 附加到 FileInputStream</span><span class="pln">
                </span><span class="typ">BufferedReader</span><span class="pln"> inputReader </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">BufferedReader</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">InputStreamReader</span><span class="pun">(</span><span class="pln">
                        openFileInput</span><span class="pun">(</span><span class="pln">filename</span><span class="pun">)));</span><span class="pln">
                </span><span class="typ">String</span><span class="pln"> inputString</span><span class="pun">;</span><span class="pln">
                </span><span class="com">//逐行读取数据并将其存储到字符串缓冲区中</span><span class="pln">
                </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">((</span><span class="pln">inputString </span><span class="pun">=</span><span class="pln"> inputReader</span><span class="pun">.</span><span class="pln">readLine</span><span class="pun">())</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                    stringBuffer</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">inputString </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\n"</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">

            </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">IOException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="com">//在 toast 上显示数据</span><span class="pln">
        </span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">makeText</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">(),</span><span class="pln">stringBuffer</span><span class="pun">.</span><span class="pln">toString</span><span class="pun">(),</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">LENGTH_LONG</span><span class="pun">).</span><span class="pln">show</span><span class="pun">();</span><span class="pln">

        </span><span class="pun">}</span><span class="pln">

    </span><span class="pun">});</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

}

运行上面代码输出

android internal storage 1android internal storage 2android internal storage 3android internal storage 4android internal storage 5

参考链接

www.learnfk.com/android/and…