508 Stimmen

Datei konvertieren: Uri in Datei in Android

Wie konvertiert man am einfachsten von einer android.net.Uri Objekt, das eine file: Typ zu einer File Objekt in Android?

Ich habe das Folgende versucht, aber es funktioniert nicht:

File file = new File(Environment.getExternalStorageDirectory(), "read.me");
Uri uri = Uri.fromFile(file);
File auxFile = new File(uri.toString());
assertEquals(file.getAbsolutePath(), auxFile.getAbsolutePath());

0 Stimmen

Hier ist meine Lösung!! Es funktioniert gut! stackoverflow.com/questions/2789276/

1 Stimmen

0 Stimmen

Was bewirkt assertEquals?

-2voto

John Kamau Punkte 27

Abrufen des Eingabestroms mit Hilfe des Inhaltsauflösers

InputStream inputStream = getContentResolver().openInputStream(uri);

Kopieren Sie dann den Eingabestrom in eine Datei

FileUtils.copyInputStreamToFile(inputStream, file);

Muster-Utility-Methode:

private File toFile(Uri uri) throws IOException {
        String displayName = "";
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);

        if(cursor != null && cursor.moveToFirst()){
            try {
                displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
            }finally {
                cursor.close();
            }
        }

        File file =  File.createTempFile(
                FilenameUtils.getBaseName(displayName),
                "."+FilenameUtils.getExtension(displayName)
        );
        InputStream inputStream = getContentResolver().openInputStream(uri);
        FileUtils.copyInputStreamToFile(inputStream, file);
        return file;
    }

-2voto

Phạm Hùng Punkte 29

Public String getRealPathFromURI(Uri uri) {

    String result;
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    if (cursor == null) {
        result = uri.getPath();
        cursor.close();
        return result;
    }
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    result = cursor.getString(idx);
    cursor.close();
    return result;
}

Dann wird die Datei von URI abgerufen:

        File finalFile = newFile(getRealPathFromURI(uri));

--HOFFNUNG KANN IHNEN HELFEN----

2 Stimmen

Beachten Sie, dass diese Technik unter Android Q verboten ist. Sie können nicht mehr auf die DATA-Spalte zugreifen (und das war von vornherein ein unzuverlässiger Ansatz).

-3voto

Linh Punkte 49889

Erweiterung auf Basis der Antwort von @Jacek Kwiecien für convert Bild-URI a fichier

fun Uri.toImageFile(context: Context): File? {
    val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
    val cursor = context.contentResolver.query(this, filePathColumn, null, null, null)
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            val columnIndex = cursor.getColumnIndex(filePathColumn[0])
            val filePath = cursor.getString(columnIndex)
            cursor.close()
            return File(filePath)
        }
        cursor.close()
    }
    return null
}

Wenn wir die File(uri.getPath()) funktioniert es nicht.

enter image description here

Wenn wir die Erweiterung von Android-ktx funktioniert es trotzdem nicht, weil https://github.com/Android/Android-ktx/blob/master/src/main/java/androidx/core/net/Uri.kt

6 Stimmen

Beachten Sie, dass diese Technik auf Android Q verboten ist. Sie können nicht mehr auf die DATA Spalte (und das war von vornherein ein unzuverlässiger Ansatz).

-5voto

Hinzufügen onActivityResult , docx- oder pdf-Datei erhalten

var imageUriPath = ""
imageUriPath =
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val split = (imageUri.path ? : "").split(":") //split the path.
    split[1]
  } else {
    imageUri.path ? : ""
  }
val file = File(imageUriPath)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X