С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
#1

Не создаётся файл в Android - Программирование Android

15.04.2016, 23:59. Просмотров 495. Ответов 13
Метки нет (Все метки)

После выполнения кода
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    class DownloadTask extends AsyncTask<Void, Void, Void> {
       
..............................
 
        @Override
        protected Void doInBackground(Void... params) {
            try {
                File file = new File(strPath, strName);
                if (!file.exists()) {
                    Log.e("log", "======================== file not exist");
                }
                URL connection = new URL(strURL);
                HttpURLConnection urlConn;
                urlConn = (HttpURLConnection) connection.openConnection();
                urlConn.setRequestMethod("GET");
                urlConn.connect();
                InputStream in;
                in = urlConn.getInputStream();
                OutputStream writer = new FileOutputStream(strPath+strName);
                byte buffer[] = new byte[buffSize];
                int c = in.read(buffer);
                while (c > 0) {
                    writer.write(buffer, 0, c);
                    c = in.read(buffer);
                }
                writer.flush();
                writer.close();
                in.close();
            }
            catch (MalformedURLException m) {
                Log.e("log", "======================== malformed url exception");
            }
            catch (ProtocolException m) {
                Log.e("log", "======================== protocol exception");
            }
            catch (FileNotFoundException m) {
                Log.e("log", "======================== file not found exception");
            }
            catch (IOException i) {
                Log.e("log", "======================== io exception");
            }
            return null;
        }
    }

ловит исключение, что файла не существует.
И file.exists() - false.
Эта строка File file = new File(strPath, strName); не создаёт файл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 23:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не создаётся файл в Android (Программирование Android):

Socket.io Android Создаётся много подключений - Программирование Android
Есть сервер node.js: var http = require('http'); var fs = require('fs'); var socketio = require('socket.io'); var server =...

Файл справки для Android - Программирование Android
Какие форматы поддерживает Android? и в чём лучше создать файл справки?

файл манифест для Android - Программирование Android
Создал проект для Android, взял для размещения рекламы самый стандартный Admob plugin для unity. В итоге: Приложение работает прекрасно,...

Как найти файл в Android Studio - Программирование Android
Народ, подскажите пожалуйста... Мое приложение создает файл с текстовыми данными по нажатию кнопки. Как в Андроид Студио, в эмуляторе найти...

Android Studio, файл activity_main.xml - Программирование Android
здесь понятно это название приложения package com.example.user.myapplication; здесь понятно это библиотеки import...

Прочитать файл внутри проекта Android - Программирование Android
Требуется внутри проекта из любой папки достать InputStream файла. Способ с использованием assets не подходит, метод getAssets()...

13
fraley
106 / 106 / 40
Регистрация: 24.05.2015
Сообщений: 322
16.04.2016, 10:36 #2
Цитата Сообщение от Tsegorah Посмотреть сообщение
Эта строка File file = new File(strPath, strName); не создаёт файл?
Нет.
Нужно добавить в if:
Java
1
2
3
 if (!file.exists()) {
      file.createNewFile();
}
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 350
16.04.2016, 11:42 #3
Цитата Сообщение от Tsegorah Посмотреть сообщение
Эта строка File file = new File(strPath, strName); не создаёт файл?
Если бы она создавала файл, то какой был бы смысл в следующей проверке
Цитата Сообщение от Tsegorah Посмотреть сообщение
if (!file.exists())
на его существование?
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
16.04.2016, 12:14  [ТС] #4
Добавленное
Цитата Сообщение от fraley Посмотреть сообщение
file.createNewFile();
кидает IOException. Почему такое безобразие?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.04.2016, 12:22 #5
Tsegorah, в смысле "безобразие"? Всё нормально, это checked exception
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
16.04.2016, 13:05  [ТС] #6
В том смысле, что файл не создаётся, и мне не понятно, почему.
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,067
Завершенные тесты: 1
16.04.2016, 18:52 #7
1. перед строкой
Java
1
                File file = new File(strPath, strName);
надо бы вывести в лог strPath и strName и посмотреть в них там

2. проверить в манифесте разрешение
XML
1
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
16.04.2016, 19:30  [ТС] #8
Спасибо за совет. Строчка с путём была неправильная. И я уже добавил в манифест
XML
1
2
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
и в MainActivity OnCreate вызываю вначале метод:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        Log.e("log", "======================== write premission "+permission);
        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            Log.e("log", "======================== no write premission");
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
            permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
            Log.e("log", "======================== write premission " + permission);
            if (permission != PackageManager.PERMISSION_GRANTED) {
                Log.e("log", "======================== failed to get write premission");
            }
        }
        int permission1 = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
        Log.e("log", "======================== read premission "+permission);
        if (permission1 != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            Log.e("log", "======================== no read premission");
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
            permission1 = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
            Log.e("log", "======================== read premission "+permission);
            if (permission1 != PackageManager.PERMISSION_GRANTED) {
                Log.e("log", "======================== failed to get read premission");
            }
        }
    }

В результате выводится, что premission=0, то есть, доступ, вроде, должен быть.
Но при попытке записи возникает ошибка EACCES (Permission denied).
Возможно, дело в том, что запись происходит внутри класса-наследника AsyncTask?
Если так, то как ему предоставить доступ?
Если нет, то в чём тогда дело может быть?
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,067
Завершенные тесты: 1
16.04.2016, 20:09 #9
Цитата Сообщение от Паблито Посмотреть сообщение
. перед строкой
Java(TM) 2 Platform Standard Edition 5.0
Выделить код
1
File file = new File(strPath, strName);
надо бы вывести в лог strPath и strName и посмотреть в них там
дубль два
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
16.04.2016, 21:17  [ТС] #10
Я же говорю, что посмотрел, и нашёл ошибку там. Теперь я тупо в коде пишу путь "/storage/emulated/". И эта папка есть в диспетчере файлов. А названия файлов разные - "19472EluveitieAidu", например, или "19479Rob ZombieSuperbeast".
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,067
Завершенные тесты: 1
17.04.2016, 13:33 #11
нужен лог ошибки
и в названиях файлов не должно быть пробелов и мне кажется они не могут начинаться с цифр
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
17.04.2016, 21:41  [ТС] #12
Названия файлов теперь начинаются не с цифр, в некоторых из них нет пробелов, но они тоже не создаются.
Что имеется в виду под логом ошибки?
После выполнения метода
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
        @Override
        protected Void doInBackground(Void... params) {
            boolean b = false;
            strPath = "/storage/emulated/";
            try {
                File file = new File(strPath, strName);
                Log.e("log", "======================== dir "+strPath);
                Log.e("log", "======================== name "+strName);
                if (file.getParentFile() == null) {
                    Log.e("log", "======================== no parent file");
                    file.getParentFile().mkdirs();
                }
                try {
                    if (!file.exists()) {
                        b = file.createNewFile();
                        if (b = true) Log.e("log", "======================== file created");
                        if (b = false) Log.e("log", "======================== file already exists");
                        Log.e("log", "======================== file not exist");
                    }
                } catch (IOException i) {
                    Log.e("log", "======================== can_t create file ==== " + i.getMessage());
                }
                if (b || file.isFile()) {
                    Log.e("log", "======================== writing in file");
                    URL connection = new URL(strURL);
                    HttpURLConnection urlConn = null;
                    try {
                        urlConn = (HttpURLConnection) connection.openConnection();
                    } catch (IOException i) {
                        Log.e("log", "======================== can_t open connection");
                    }
                    urlConn.setRequestMethod("GET");
                    try {
                        urlConn.connect();
                    } catch (IOException i) {
                        Log.e("log", "======================== can_t connect");
                    }
                    InputStream in = null;
                    try {
                        in = urlConn.getInputStream();
                    } catch (IOException i) {
                        Log.e("log", "======================== can_t get input stream");
                    }
                    OutputStream writer = new FileOutputStream(strPath + strName);
                    byte buffer[] = new byte[buffSize];
                    int c = 0;
                    try {
                        c = in.read(buffer);
                    } catch (IOException i) {
                        Log.e("log", "======================== can_t read");
                    }
                    while (c > 0) {
                        try {
                            writer.write(buffer, 0, c);
                        } catch (IOException i) {
                            Log.e("log", "======================== can_t write in cycle");
                        }
                        try {
                            c = in.read(buffer);
                        } catch (IOException i) {
                            Log.e("log", "======================== can_t read in cycle");
                        }
                    }
                    try {
                        writer.flush();
                        writer.close();
                        in.close();
                    } catch (IOException i) {
                        Log.e("log", "======================== can_t flush/close");
                    }
                }
            }
            catch (MalformedURLException m) {
                Log.e("log", "======================== malformed url exception");
            }
            catch (ProtocolException m) {
                Log.e("log", "======================== protocol exception");
            }
            catch (FileNotFoundException m) {
                Log.e("log", "======================== file not found exception");
            }
            /*catch (IOException i) {
                Log.e("log", "======================== io exception");
            }*/
            return null;
        }

выводится:
Кликните здесь для просмотра всего текста
04-17 14:32:35.741 2128-2696/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.741 2128-2696/com.example.vkapp1 E/log: ======================== name vkf20444ScannerThe Race
04-17 14:32:35.742 2128-2696/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.748 2128-2697/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.749 2128-2697/com.example.vkapp1 E/log: ======================== name vkf20445EluveitieAidu
04-17 14:32:35.749 2128-2697/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.751 2128-2698/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.751 2128-2698/com.example.vkapp1 E/log: ======================== name vkf20446EluveitieL'appel des Montagnes
04-17 14:32:35.752 2128-2698/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.753 2128-2699/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.753 2128-2699/com.example.vkapp1 E/log: ======================== name vkf20447EluveitieKing
04-17 14:32:35.753 2128-2699/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.755 2128-2700/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.755 2128-2700/com.example.vkapp1 E/log: ======================== name vkf20448MotörheadAce Of Spades
04-17 14:32:35.755 2128-2700/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.756 2128-2700/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.756 2128-2700/com.example.vkapp1 E/log: ======================== name vkf20449MotörheadVictory or Die
04-17 14:32:35.756 2128-2700/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== name vkf20450LonewolfForce To Light
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== name vkf20451Rob ZombieFeel So Numb
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.757 2128-2700/com.example.vkapp1 E/log: ======================== name vkf20452Rob ZombieSuperbeast
04-17 14:32:35.758 2128-2700/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
04-17 14:32:35.758 2128-2700/com.example.vkapp1 E/log: ======================== dir /storage/emulated/
04-17 14:32:35.758 2128-2700/com.example.vkapp1 E/log: ======================== name vkf20453Rob ZombieDragula
04-17 14:32:35.758 2128-2700/com.example.vkapp1 E/log: ======================== can_t create file ==== open failed: EACCES (Permission denied)
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
17.04.2016, 21:44  [ТС] #13
Код всего класса на всякий случай:MainActivity.txt
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
17.04.2016, 23:38  [ТС] #14
Со всем разобрался, спасибо. В Genymotion в одну невидимую папку надо было файлы записывать, а искать их в другом месте.
0
17.04.2016, 23:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2016, 23:38
Привет! Вот еще темы с ответами:

Android. Как сохранить ArrayList<String> в файл - Программирование Android
Ребята, помогите пожалуйста. Есть список: ArrayList&lt;String&gt; myList; Пишу приложение типа заметок на Android, в качестве...

Как открыть jar файл в Android Studio? - Программирование Android
Человек с работы прислал jar файл приложения. Я должен поразбираться и посмотреть как что устроено (только начал изучение android). У меня...

Где находится файл .apk в Android Studio? - Программирование Android
Где находится файл .apk проекта в android studio? И какое у него будет имя?

Не удается создать директорию и записать файл (Android 6) - Программирование Android
Предварительно добавил в permission android.permission.WRITE_EXTERNAL_STORAGE и android.permission.READ_EXTERNAL_STORAGE (хоть по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.