Improvement on WriteToFile.
This commit is contained in:
parent
046d1d3a26
commit
507878e10a
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue