Доступ к внешнему файлу

Я хочу повторно получить доступ к файлу, созданному в студии Android. Я нашел следующий фрагмент кода при обмене стеками

File root = android.os.Environment.getExternalStorageDirectory();
    // See http://stackoverflow.com/questions/3551821/android-write-to-sd-card-folder

    File dir = new File(root.getAbsolutePath() + "/download");
    File file = new File(dir, "myData.txt");

Насколько я понимаю, это создает файл с именем «myData.txt» в папке загрузки. Что я хочу сделать, так это передать "файл" в функцию в другом методе, например

  public void onLocationChanged(Location location) {
        ArrayList<Location> list = new ArrayList<>();
        list.add(location);
        GPX.writePath(file,"hello",list);

    }

Как мне создать файловую переменную, которая обращается к текстовому файлу без фактического создания нового файла?

GPX.writePath(**file**,"hello",list);. Просто перейдите на `GPX.writePath (file," hello ", list);`
greenapps 08.05.2018 13:17

@greenapps В нем говорится, что файл символов не может быть разрешен, поскольку ссылка на файл находится в другом методе, он не может быть вызван в этом методе.

user9558800 08.05.2018 14:26

Так что это ошибка времени компиляции. Затем сделайте вашу файловую переменную глобальной или передайте ее следующей функции с дополнительным параметром File.

greenapps 08.05.2018 14:28

Но действительно ли вы хотите записывать в один и тот же файл gpx при каждом изменении местоположения? Как вы это делаете сейчас, похоже, что writePath () перезапишет весь файл. Похоже, ваш файл gpx будет содержать только последнее местоположение. Или это не так? Пожалуйста скажи нам.

greenapps 08.05.2018 14:30

Да, я хочу, чтобы к файлу gpx было добавлено несколько строк местоположений GPS, я не думал, что это переопределит все предыдущие местоположения. Я свяжу вам файл GPX.java (он не был написан самостоятельно, я нашел его на github). Вот он: pasted.co/0c686df1

user9558800 08.05.2018 14:37

Вы можете ссылаться на то, что хотите, но я не буду следить за этим. Пожалуйста, проверьте себя. Вы должны делать работу.

greenapps 08.05.2018 15:15

В чем же тогда цель этой ветки комментариев? Что было у вас мотивацией вообще прокомментировать? Ваш последний ответ содержит буквально 0 баллов. Вы задали мне вопрос в своем предпоследнем ответе, и я ответил на него, а также связал вас с дополнительным кодом. Я начинаю расспрашивать сообщество на этом сайте такими же ответами, как и ваш, если честно.

user9558800 08.05.2018 15:20

Да. Ответь на вопросы. Экспериментируйте. Выполнять работу. Это не служба отладки и не служба написания кода.

greenapps 08.05.2018 15:24

Вы не ответили на вопрос, который я задал, так что снова вы совершенно бесполезны в контексте этой беседы. Что касается сайта вопросов и ответов, то здесь пользователям, похоже, действительно нравится не отвечать на вопросы.

user9558800 08.05.2018 15:34

Это может быть. Но у вас есть много советов и подсказок. Итак, чтобы продолжить, вы попробуете их. И если у вас есть проблемы, вы публикуете свои проблемы и спрашиваете, что не так. Вот что нам здесь нравится.

greenapps 08.05.2018 15:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
10
56
1

Ответы 1

File root = android.os.Environment.getExternalStorageDirectory();
// See http://stackoverflow.com/questions/3551821/android-write-to-sd-card-folder   
File dir = new File(root.getAbsolutePath() + "/download");
File file = new File(dir, "myData.txt");

Фактически он не создает физический файл. Он просто создает объект в памяти (на который ссылается file).

Затем вы можете использовать ссылку в своем методе для записи в физический файл, например:

public void onLocationChanged(File location) throws IOException {
    ArrayList<File> list = new ArrayList<>();
    list.add(location);
    writeToFile("Text", location);
}

private static void writeToFile(String text, File file)
        throws IOException {
    try(BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
        writer.write(text);
    }
}

Обновление 2

Если вы хотите использовать ссылку в своем методе, вы можете передать ссылку file вашему методу, который должен иметь некоторый код для записи текста в фактический файл:

GPX.writePath(file,"hello",list);

...

public static void writePath(File file, String n, List<Location> points) throws IOException {
    ...
    try(BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
        writer.write(n);
    }
}

У меня уже есть отдельный класс, который записывает в файл (это будет файл gpx, который я просто тестирую с помощью txt). Я просто ищу способ передать ссылку в GPX.writePath, когда я уже создал ссылку другим методом. Как получить доступ к уже созданной ссылке для использования в методе LocationChanged.

user9558800 08.05.2018 13:09

@ user9558800, какой тип параметра файл в GPX.writePath(**file**,"hello",list);? Это java.lang.String?

gil.fernandes 08.05.2018 13:12

@ user9558800 Проверьте обновленный ответ и посмотрите, поможет ли он.

gil.fernandes 08.05.2018 13:42

Извините за поздний ответ, первый параметр на самом деле относится к типу файла, вот метод ................. public static void writePath (File file, String n, List <Location > баллы)

user9558800 08.05.2018 14:13

@ user9558800 Я обновил ответ примером использования ссылки file.

gil.fernandes 08.05.2018 14:50

Проблема в том, что я не могу получить доступ к ссылке на файл, поскольку изначально я создаю переменную «File file» в другом методе, что делает ее недоступной в методе onLocationChanged. Мне нужно просто выяснить, как снова сослаться на тот же самый файл другим методом. Могу ли я просто повторить код, который я изначально использовал для создания ссылочной переменной в исходном методе?

user9558800 08.05.2018 15:33

Итак, если я понимаю вашу проблему, вы хотите записывать один отдельный файл для каждого вызова onLocationChanged. Все файлы должны находиться в одной папке, это правильно?

gil.fernandes 08.05.2018 16:00

Нет, я хочу, чтобы в одной папке был один файл со всеми линиями gps /

user9558800 08.05.2018 17:21

Тогда решение должно заключаться в том, чтобы просто иметь члена со ссылкой file в вашей деятельности Android (если я не ошибаюсь). Вы можете поместить код для создания файлового объекта в метод onCreate. Тогда вы можете просто вызвать GPX.writePath(file,"hello",list);

gil.fernandes 08.05.2018 17:41

Другие вопросы по теме