Created WriteTofile helper class.

This commit is contained in:
Filip Strajnar 2024-10-20 18:18:27 +02:00
parent aefba383f2
commit 9e989684a1

View file

@ -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));
}
}