java android file android-activity path

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