java - Android: obtenga la ruta real de un archivo.txt seleccionado del explorador de archivos
file android-activity (2)
No encontré cómo puedo obtener el archivo del Uri.
No hay archivo
ACTION_OPEN_DOCUMENT
y
ACTION_GET_CONTENT
no abren un archivo.
Abren un documento.
Ese documento
podría
ser un archivo.
Puede que no.
Ese
Uri
podría señalar:
- Un archivo local en almacenamiento externo
- Un archivo local en almacenamiento interno para la otra aplicación
- Un archivo local en almacenamiento extraíble
- Un archivo local que está encriptado y necesita ser desencriptado sobre la marcha.
-
Una secuencia de bytes en una columna
BLOB
en una base de datos - Una pieza de contenido que primero debe descargar la otra aplicación
- ...y así
¿Cómo puedo obtener la ruta real del archivo?
Usted no
Si solo desea aceptar archivos, integre
una biblioteca de selección de archivos en
lugar de usar
ACTION_OPEN_DOCUMENT
o
ACTION_GET_CONTENT
.
Solo tenga en cuenta que el acceso del sistema de archivos al almacenamiento externo está programado para desaparecer con Android Q.
Si usa
ACTION_GET_CONTENT
, y el esquema del
Uri
que obtiene es un
file
, entonces
getPath()
será una ruta del sistema de archivos.
De lo contrario, debe comprender que
no tiene idea de dónde proviene el documento
y dejar de pensar en términos de "ruta real del archivo".
Use
ContentResolver
y
openInputStream()
para hacer una copia del contenido en algún archivo que controle, luego trabaje con ese archivo.
Estoy trabajando en una aplicación donde deseo poder exportar e importar algunos datos de la aplicación, en un archivo .txt. La API mínima de la aplicación es 21.
La parte de exportación funciona bien, pero tengo problemas con la parte de importación.
Abro el explorador de archivos:
butImportPatient.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
startActivityForResult(intent, IMPORTPATIENT_ACTIVITY_REQUEST_CODE);
}
});
Parece que está funcionando.
Pero mi onActivityResult no funciona, no encontré cómo puedo obtener el archivo del Uri.
Por ahora, aquí está mi código:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMPORTPATIENT_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
File file = new File(data.getData().getPath()) ;
String path = file.getAbsolutePath() ;
StringBuilder text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(path));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append("/n");
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
AlertDialog.Builder builder = new AlertDialog.Builder(this) ;
builder.setMessage(path)
.show() ;
}
}
Es una mezcla de múltiples publicaciones que vi aquí, pero ninguna parece funcionar.
Me sale este camino:
/document/home:List.txt
Crea FileNotFoundException. ¿Cómo puedo obtener la ruta real del archivo?
Android tiene problemas para leer la ruta real del archivo desde el dispositivo, le recomendé que use esta biblioteca para seleccionar el archivo
implementación ''com.droidninja: filepicker: 2.2.1'' FielPicker