Как создать / записать файл в корень устройства Android? - PullRequest
3 голосов
/ 17 января 2010

Я обнаружил, что вы можете использовать что-то вроде этого для создания файла:

FileOutputStream  fs = openFileOutput("/test.in", MODE_WORLD_WRITEABLE);
String s = "[Head]\r\n";
s += "Type=2";
byte[] buffer = s.getBytes();
fs.write(buffer);
fs.close();

При запуске приведенного выше кода я получаю исключение IllegalArgumentException:

java.lang.IllegalArgumentException: Файл /test.in содержит путь Сепаратор

и я предполагаю, что "/" не ценится. Я хотел получить символ "/", поскольку мне нужно записать файл в корневой каталог устройства, как указано в API при попытке выполнить следующие действия:

Запрос представляет собой текстовый файл (UNICODE) с расширение файла ".in". Приложение читает и анализирует .in файл, когда он помещен в корень каталог на мобильном устройстве.

Вопрос: как мне поместить файл в корневой каталог? Я искал ответ, но пока не нашел.

Ответы [ 3 ]

7 голосов
/ 17 января 2010

Context.openFileOutput предназначен для создания файлов, приватных для вашего приложения. они идут в личный каталог данных вашего приложения. вы предоставляете имя , а не путь: "имя Имя файла, который нужно открыть; не может содержать разделители пути".

http://developer.android.com/reference/android/content/Context.html#openFileOutput(java.lang.String, int)

что касается вашего вопроса, вы не можете писать в /, если вы не root:

my-linux-box $ adb shell ls -l -d / drwxr-xr-x root root 2010-01-16 07:42 $

Я не знаю, каков ваш API, который ожидает от вас записи в корневой каталог, но я предполагаю, что это не API Android, и вы читаете неправильную документацию;

4 голосов
/ 27 июля 2011

Вы можете добавить файлы с путем в личный каталог, например

    String path = this.getApplicationContext().getFilesDir() + "/testDir/";
    File file = new File(path);
    file.mkdirs();
    path += "testlab.txt";
    OutputStream myOutput;
    try {
    myOutput = new BufferedOutputStream(new FileOutputStream(path,true));
    write(myOutput, new String("TEST").getBytes());
    myOutput.flush();
    myOutput.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
0 голосов
/ 31 марта 2011

Я столкнулся с той же проблемой сегодня

java.lang.IllegalArgumentException: файл /test.txt содержит разделитель пути

и когда я попробовал следующее, это сработало.

           File inputFile = new File("/storage/new/test.txt");
           FileInputStream isr = new FileInputStream(inputFile);
           DataInputStream in = new DataInputStream(isr);

           if(!inputFile.exists()){

                   Log.v("FILE","InputFile not available");

            }
           else
           {
               while((line = in.readLine()) != null)
               {
                   ........ //parse 
               }
           }              

(Кстати, у меня возникла эта проблема вне / root dir и во время поиска я увидел этот пост)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...