使用文件输入/输出流方法存储数据安全

时间:2017-04-30 19:11:58

标签: java android fileinputstream fileoutputstream

如果我使用文件输入/输出流方法,即使它是基本安全性,存储在应用程序中的数据是否也是安全的,例如它是否会使未经授权访问该数据变得更加困难?这是数据存储的类。

public class Utilities {

public static final String FILE_EXTENSION = ".bin";

public static boolean saveNote(Context context, Notes notes){
    String fileName = String.valueOf(notes.getDateTime()) + FILE_EXTENSION;

    FileOutputStream fos;
    ObjectOutputStream oos;

    try {

        fos = context.openFileOutput(fileName, context.MODE_PRIVATE);
        oos = new ObjectOutputStream(fos);
        oos.writeObject(notes);
        oos.close();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
        return false; //tell the user something went wrong
    }

    return true;
}

public static ArrayList<Notes> getSavedNotes(Context context) {
    ArrayList<Notes> notes = new ArrayList<>();

    File filesDir = context.getFilesDir();
    filesDir.getAbsolutePath();
    ArrayList<String> noteFiles = new ArrayList<>();

    for(String file : filesDir.list()) {
        if(file.endsWith(FILE_EXTENSION)) {
            noteFiles.add(file);
        }
    }

    FileInputStream fis;
    ObjectInputStream ois;

    for(int i = 0; i < noteFiles.size(); i++) {
        try{
            fis = context.openFileInput(noteFiles.get(i));
            ois = new ObjectInputStream(fis);

            notes.add((Notes)ois.readObject());

            fis.close();
            ois.close();



        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;

        }
    }

    return notes;

}

public static Notes getNoteByName(Context context, String fileName) {
    File file = new File(context.getFilesDir(), fileName);
    Notes notes;

    if(file.exists()) {
        FileInputStream fis;
        ObjectInputStream ois;

        try {
            fis = context.openFileInput(fileName);
            ois = new ObjectInputStream(fis);

            notes = (Notes) ois.readObject();

            fis.close();
            ois.close();

        } catch(IOException | ClassNotFoundException e){
            e.printStackTrace();
            return null;
        }

        return notes;
    }

    return null;
}

public static void deleteNote(Context context, String fileName) {
    File Dir = context.getFilesDir();
    File file = new File(Dir, fileName);

    if (file.exists()) file.delete();

}

}

1 个答案:

答案 0 :(得分:0)

是的,但它与FileInputStream没有任何关系。您恰好正在写入internal storage的应用部分。访问这些文件的唯一内容是您的应用和root用户设备。如果您在其他地方写作 - 例如external storage - 可能有更多应用可以访问它。