Запись файлов в папку / system / app в эмуляторе - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь написать APK в / system / app расположение в Android Emulator.Вот мой код:

File path = Environment.getRootDirectory();
File fileToWrite = new File(path, "/" + fileName);

byte[] buff = new byte[1024];
int l = 0;
// write buffer to file
FileOutputStream fos = new FileOutputStream(fileToWrite);
while((l = zis.read(buff)) > 0){
    fos.write(buff,0, l);
}
fos.close();

Мой AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Однако я получаю следующее сообщение об ошибке:

java.io.FileNotFoundException: /system/MainApp-debug.apk (файловая система только для чтения) 06-08 08: 51: 59.858 2921-3160 / com.mainapp W / System.err: at java.io.FileOutputStream.open0 (собственный метод)в java.io.FileOutputStream.open (FileOutputStream.java:287)

Мне удалось записать в папку /mnt/sdcard/Download, используя тот же код.Но я не уверен, почему он не может записать в папку /system/app.

Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 08 июня 2018

вот код, который я использовал для создания пути:

    public static File root = android.os.Environment
        .getExternalStorageDirectory();

public static String path = root.getAbsolutePath() + "/" + directoryName
        + "/";

public static boolean CreateDirectory() {

    boolean ret = false;
    path = root.getAbsolutePath() + "/" + directoryName + "/";
    File folderExisting = new File(root.getAbsolutePath(), directoryName);

    if (folderExisting.exists()) {
        ret = true;
    } else {
        ret = folderExisting.mkdir();
        // ret = false;
    }

    return ret;
}

, а затем для сохранения вещей:

    public static boolean SaveToSD(List<String> data, String fileName) {

    // File root = android.os.Environment.getExternalStorageDirectory();
    boolean ret = false;
    CreateDirectory();
    File file = new File(path, fileName);

    try {
        FileOutputStream f = new FileOutputStream(file);
        PrintWriter pw = new PrintWriter(f);
        for (int idx = 0; idx < data.size(); idx++) {
            if (data.get(idx) != null)
                pw.println(data.get(idx));
        }

        pw.flush();
        pw.close();
        f.close();
        ret = true;
    } catch (FileNotFoundException e) {
        ret = false;
        e.printStackTrace();
    } catch (IOException e) {
        ret = false;
        e.printStackTrace();
    }

    return ret;

}

надеюсь, это поможет вам

идля объекта:

        FileOutputStream fos = new FileOutputStream("file");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(mb);
        oos.close();
...