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;
import android.content.Context;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.util.Log;
@ -9,30 +8,22 @@ import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
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.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.function.Consumer;
public class WriteToFile implements ActivityResultCallback<Uri> {
private final String TAG = WriteToFile.class.getName();
private final InputStream fileContents;
private Consumer<OutputStream> fileConsumer;
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;
ActivityResultLauncher<String> launcher =
activity.registerForActivityResult(new ActivityResultContracts.CreateDocument(fileMimeType), this);
launcher.launch(fileName);
this.launcher = activity.registerForActivityResult(
new ActivityResultContracts.CreateDocument(fileMimeType), this);
}
@Override
@ -52,9 +43,7 @@ public class WriteToFile implements ActivityResultCallback<Uri> {
return;
}
try (FileOutputStream fileOutputStream = new FileOutputStream(fileDescriptor.getFileDescriptor())) {
while (fileContents.available() > 0) {
fileOutputStream.write(fileContents.read());
}
fileConsumer.accept(fileOutputStream);
}
}
} 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){
return new WriteToFile(activity, fileName, fileMimeType, new ByteArrayInputStream(fileContents));
}
public static WriteToFile WriteString(AppCompatActivity activity, String fileName, String fileMimeType, String fileContents){
return WriteBytes(activity, fileName, fileMimeType, fileContents.getBytes(StandardCharsets.UTF_8));
public void write(String fileName, Consumer<OutputStream> fileConsumer){
this.fileConsumer = fileConsumer;
launcher.launch(fileName);
}
}