Android 文件操作

文章目录

    • Android 文件操作
        • 布局文件
        • MainActivity

Android 文件操作

布局文件


<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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="写文件"
        android:id="@+id/btn_write"/>


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读文件"
        android:id="@+id/btn_read"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入姓名"
        android:id="@+id/edt_name"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存"
        android:id="@+id/btn_save"
        />

LinearLayout>

MainActivity

package com.example.demo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {
     
    private Button btn_write;
    private Button btn_read;
    private EditText edt_name;
    private  Button btn_save;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edt_name = findViewById(R.id.edt_name);
        btn_save = findViewById(R.id.btn_save);
        btn_save.setOnClickListener(new View.OnClickListener() {
     
            @Override
            public void onClick(View v) {
     
                String name = edt_name.getText().toString();
                int age = 20;
                // String className =
                // ...

                // 将个人信息写入文件
                writeToFile(name, age);

            }
        });

        // 从文件中读取个人信息
        readFromFile();

        btn_write = findViewById(R.id.btn_write);
        btn_write.setOnClickListener(new View.OnClickListener() {
     
            @Override
            public void onClick(View v) {
     
//                writeUseFileOutputStream();
//                writeUseFileWriter();
                writeUseBufferedWriter();
            }
        });


        btn_read = findViewById(R.id.btn_read);
        btn_read.setOnClickListener(new View.OnClickListener() {
     
            @Override
            public void onClick(View v) {
     
//                readByteArr();
//                readUseFileReader();
                readUseBufferedReader();
            }
        });

    }

    /**
     * 从文件中读取个人信息
     */
    private void readFromFile() {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/info.txt";

        try {
     
            FileReader fileReader = new FileReader(filePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String name = bufferedReader.readLine();
            edt_name.setText(name);
            int age = Integer.parseInt(bufferedReader.readLine());
            // edt_age.setText(String.valueOf(age));
            Log.e("MainActivity", "age = " + age);
            bufferedReader.close();
            fileReader.close();
        } catch (FileNotFoundException e) {
     
            e.printStackTrace();
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 将个人信息写入文件中
     * @param name
     * @param age
     */
    private void writeToFile(String name, int age) {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/info.txt";
        try {
     
            FileWriter fileWriter = new FileWriter(filePath);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(name);
            bufferedWriter.newLine();
            bufferedWriter.write(String.valueOf(age));
            bufferedWriter.flush();
            bufferedWriter.close();
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 使用BufferedReader读文件
     */
    private void readUseBufferedReader() {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/hello.txt";
        try {
     
            FileReader fileReader = new FileReader(filePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line = bufferedReader.readLine();
            while(line != null){
     
                Log.e("MainAcitivty" , "line = " + line);
                line = bufferedReader.readLine();
            }
            bufferedReader.close();
            fileReader.close();
        } catch (FileNotFoundException e) {
     
            e.printStackTrace();
        } catch (IOException e) {
     
            e.printStackTrace();
        }

    }

    /**
     * 使用FileReader读文件
     */
    private void readUseFileReader() {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/hello.txt";
        try {
     
            FileReader fileReader = new FileReader(filePath);
            char[] cbuf = new char[100];
            fileReader.read(cbuf);
            fileReader.close();

            Log.e("MainAcitivty" , Arrays.toString(cbuf));
        } catch (FileNotFoundException e) {
     
            e.printStackTrace();
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 使用BufferedWriter写文件
     */
    private void writeUseBufferedWriter() {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/hello.txt";
        try {
     
            FileWriter fileWriter = new FileWriter(filePath);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(100);
            bufferedWriter.newLine();
            bufferedWriter.write("how old are you");
            bufferedWriter.flush();
            bufferedWriter.close();
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 使用FileWriter进行写文件
     */
    private void writeUseFileWriter() {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/hello.txt";
        try {
     
            FileWriter fileWriter = new FileWriter(filePath);
            fileWriter.write(100);
            fileWriter.write(" how are you");
            fileWriter.flush();
            fileWriter.close();
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 使用FileOutputStream进行写文件
     */
    private void writeUseFileOutputStream() {
     //获取当前应用的文件目录
        String path = getFilesDir().getAbsolutePath();
        Log.e("MainActivity", "path = " + path);
        String filePath = path + "/hello.txt";
        try {
     
            FileOutputStream fileOutputStream = new FileOutputStream(filePath, true);
            String str = "hello world";
            // 将String转成byte[]
            byte[] bytes = str.getBytes();
            fileOutputStream.write(bytes);
            fileOutputStream.flush();
            fileOutputStream.close();
        } catch (FileNotFoundException e) {
     
            e.printStackTrace();
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 每次读取一个100大小的数组
     */
    private void readByteArr() {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/hello.txt";

        try {
     
            FileInputStream fileInputStream = new FileInputStream(filePath);
            byte[] result = new byte[100];
            fileInputStream.read(result);
            Log.e("MainAcitivy", Arrays.toString(result));

            result = getArr(result);
            String str = new String(result);
            Log.e("MainAcitivy","str = " + str);
            fileInputStream.close();
        } catch (FileNotFoundException e) {
     
            e.printStackTrace();
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 去掉数组中的0
     * @param src
     * @return
     */
    private byte[] getArr(byte[] src) {
     
        int count = 0;
        for(int i=0; i<src.length; i++){
     
            if(src[i]!=0){
     
                count++;
            }else {
     
                break;
            }
        }

        byte[] res = new byte[count];
        for(int i=0; i<count;i++){
     
            res[i] = src[i];
        }

        return res;
    }

    /**
     * 每次读取一个字节
     */
    private void readInt() {
     
        String path = getFilesDir().getAbsolutePath();
        String filePath = path + "/hello.txt";

        try {
     
            FileInputStream fileInputStream = new FileInputStream(filePath);
            int ch =  fileInputStream.read();
            while(ch != -1){
     
                Log.e("MainActivity", "ch = " + ch);
                ch = fileInputStream.read();
            }
            fileInputStream.close();
        } catch (FileNotFoundException e) {
     
            e.printStackTrace();
        } catch (IOException e) {
     
            e.printStackTrace();
        }

    }
}

你可能感兴趣的:(Android 文件操作)