Improvement on WriteToFile.

This commit is contained in:
Filip Strajnar 2024-10-20 21:42:29 +02:00
parent 046d1d3a26
commit 507878e10a

View file

@ -1,6 +1,5 @@
package com.proculite.logmylocation; package com.proculite.logmylocation;
import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.util.Log; import android.util.Log;
@ -9,30 +8,22 @@ import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.nio.charset.StandardCharsets; import java.util.function.Consumer;
import java.nio.file.Files;
import java.nio.file.Paths;
public class WriteToFile implements ActivityResultCallback<Uri> { public class WriteToFile implements ActivityResultCallback<Uri> {
private final String TAG = WriteToFile.class.getName(); private final String TAG = WriteToFile.class.getName();
private final InputStream fileContents; private Consumer<OutputStream> fileConsumer;
private final AppCompatActivity activityCompat; private final AppCompatActivity activityCompat;
private final ActivityResultLauncher<String> launcher;
public WriteToFile(AppCompatActivity activity, String fileName, String fileMimeType, InputStream fileContents) public WriteToFile(AppCompatActivity activity, String fileMimeType)
{ {
this.fileContents = fileContents;
this.activityCompat = activity; this.activityCompat = activity;
ActivityResultLauncher<String> launcher = this.launcher = activity.registerForActivityResult(
activity.registerForActivityResult(new ActivityResultContracts.CreateDocument(fileMimeType), this); new ActivityResultContracts.CreateDocument(fileMimeType), this);
launcher.launch(fileName);
} }
@Override @Override
@ -52,9 +43,7 @@ public class WriteToFile implements ActivityResultCallback<Uri> {
return; return;
} }
try (FileOutputStream fileOutputStream = new FileOutputStream(fileDescriptor.getFileDescriptor())) { try (FileOutputStream fileOutputStream = new FileOutputStream(fileDescriptor.getFileDescriptor())) {
while (fileContents.available() > 0) { fileConsumer.accept(fileOutputStream);
fileOutputStream.write(fileContents.read());
}
} }
} }
} catch (IOException e) { } catch (IOException e) {
@ -62,11 +51,8 @@ public class WriteToFile implements ActivityResultCallback<Uri> {
} }
} }
public static WriteToFile WriteBytes(AppCompatActivity activity, String fileName, String fileMimeType, byte[] fileContents){ public void write(String fileName, Consumer<OutputStream> fileConsumer){
return new WriteToFile(activity, fileName, fileMimeType, new ByteArrayInputStream(fileContents)); this.fileConsumer = fileConsumer;
} launcher.launch(fileName);
public static WriteToFile WriteString(AppCompatActivity activity, String fileName, String fileMimeType, String fileContents){
return WriteBytes(activity, fileName, fileMimeType, fileContents.getBytes(StandardCharsets.UTF_8));
} }
} }