Created WriteTofile helper class.
This commit is contained in:
parent
aefba383f2
commit
9e989684a1
|
|
@ -0,0 +1,72 @@
|
|||
package com.proculite.logmylocation;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.util.Log;
|
||||
|
||||
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;
|
||||
|
||||
public class WriteToFile implements ActivityResultCallback<Uri> {
|
||||
private final String TAG = WriteToFile.class.getName();
|
||||
private final InputStream fileContents;
|
||||
private final AppCompatActivity activityCompat;
|
||||
|
||||
public WriteToFile(AppCompatActivity activity, String fileName, String fileMimeType, InputStream fileContents)
|
||||
{
|
||||
this.fileContents = fileContents;
|
||||
this.activityCompat = activity;
|
||||
ActivityResultLauncher<String> launcher =
|
||||
activity.registerForActivityResult(new ActivityResultContracts.CreateDocument(fileMimeType), this);
|
||||
launcher.launch(fileName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(Uri o) {
|
||||
if(o == null || o.getPath() == null)
|
||||
{
|
||||
Log.d(TAG, "Attempting to write to null path.");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.d(TAG, String.format("Writing to file: %s", o.getPath()));
|
||||
|
||||
try {
|
||||
try (ParcelFileDescriptor fileDescriptor = this.activityCompat.getContentResolver().openFileDescriptor(o, "w")) {
|
||||
if (fileDescriptor == null) {
|
||||
Log.e(TAG, "Parcel file descriptor is null.");
|
||||
return;
|
||||
}
|
||||
try (FileOutputStream fileOutputStream = new FileOutputStream(fileDescriptor.getFileDescriptor())) {
|
||||
while (fileContents.available() > 0) {
|
||||
fileOutputStream.write(fileContents.read());
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to write to file.");
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue