Перезаписать существующий файл во внешнем хранилище, используя его URI [android]? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть приложение, которое импортирует данные из CSV-файла, используя его URI и сканер. Это работает так:

private List<String[]> loadCSVfromURI(Uri file) throws FileNotFoundException, IOException {

    Scanner csvFileScanner = new Scanner(new BufferedReader(new InputStreamReader(getContentResolver().openInputStream(file))));

    List<String[]> csvROW = new ArrayList<>();
    int tempRow = 0;
    while(csvFileScanner.hasNextLine()){
        String line = csvFileScanner.nextLine(); // Get single line from reader
        String[] splitLine = line.split(",");
        csvROW.add(tempRow, splitLine);
        tempRow++;
    }
    return csvROW;
}

Мое приложение теперь отредактировало импортированные данные (которые были сохранены в списке массивов String) и вернул их в одну строку. Данные были возвращены в формате .CSV, например, так.

private String formatForCSV() {
    final String delimeter = "\n";
    StringBuilder formatCSVdata = new StringBuilder();
    String saveCSVrow;
    for(String[] thisRow: curCSV){
        saveCSVrow = String.join(",",thisRow);
        saveCSVrow = saveCSVrow + delimeter;
        formatCSVdata.append(saveCSVrow);
    }

    String saveCSV = formatCSVdata.toString();

    return saveCSV;
}

Теперь я sh, чтобы сохранить строку обратно в исходный файл, перезаписав то, что было изначально сохранено там, но сохранив то же местоположение и имя файла. Как я могу выполнить функцию сохранения / перезаписи, используя URI с момента, когда данные файлов были впервые скопированы в мое приложение?

1 Ответ

0 голосов
/ 29 апреля 2020

Итак, я решил эту проблему, используя Content Resolver и openOutputStream.

OutputStream overWritter = null; //Outputstream to overwrite original content
    ContentResolver saveResolver = this.getContentResolver();
    try {
        overWritter = saveResolver.openOutputStream(originalURI);
        if (overWritter != null) {
            overWritter.write(myString.getBytes());
            overWritter.close();
            Toast.makeText(this, "Save Successful", Toast.LENGTH_LONG).show();

        }
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "Save Failure", Toast.LENGTH_LONG).show();

    }

Это сохраняет и перезаписывает файл с исходным URI. Я открыт для лучших решений. Может быть, что-то более надежное.

...