android - 使用 URI [android] 覆盖外部存储中的现有文件?
问题描述
我有一个应用程序,它使用 .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;
}
我的应用程序现在已经编辑了导入的数据(存储在字符串数组列表中)并将其返回到单个字符串。数据已像这样返回为 .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;
}
我现在希望将字符串保存回原始文件,覆盖最初存储在那里的内容,但保持相同的位置和文件名。如何使用文件数据首次复制到我的应用程序时的 URI 执行保存/覆盖功能?
解决方案
所以我使用 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 中的文件。我愿意接受更好的解决方案。也许更强大的东西。
推荐阅读
- javascript - 人类可读的持续时间格式 - Codewars
- elasticsearch - Flink 向 ES 写入数据报错:request retries exceeded max retry timeout 30000
- pyspark - 如何找到只有空格的 DataFrame 列
- oracle - ORA-12505, TNS: 监听器当前不知道连接描述符 X 中给出的 SID
- testing - 开玩笑如何测试axios?
- oracle - 如何备份 OBIEE12c 的 RPD 和 Catalog?
- python - 如何实现组合搜索?
- mongodb - SvelteKit With MongoDB ReferenceError: global is not defined
- javascript - webpack HotModuleReplacementPlugin 是如何工作的,它有什么作用?
- javascript - 无效的挂机呼叫全栈开放 2021 电话簿