Skip to content
/ foc Public

File or content - abstraction for file like objects

License

Notifications You must be signed in to change notification settings

bailuk/foc

Repository files navigation

Android CI Release

foc - file or content

A java library providing a platform independent abstraction for file like objects. It supports the following types:

  • Unix and Windows filesystems trough Java File
  • Android Storage Access Framework - SAF
  • Android Assets

Build

export ANDROID_SDK_ROOT=/home/user/Android/Sdk
./gradelw build
./gradlew publishToMavenLocal

Integrate into project with Gradle

Add jitpack.io repository

repositories {
    // ...
    maven { url 'https://jitpack.io' }
}

Add dependency

dependencies {
    def focVersion = '1.3'

    // all modules
    implementation "com.github.bailuk:foc:$focVersion"

    // foc (core module)
    // implementation "com.github.bailuk.foc:foc:$focVersion"

    // foc-extended (for accessing java resources)
    // implementation "com.github.bailuk.foc:foc-android:$focVersion"

    // foc-android (Android Storage Access Framework SAF)
    // implementation "com.github.bailuk.foc:foc-android:$focVersion"
}

See jitpack.io for more.

Example

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

import java.io.IOException;
import java.io.InputStream;

import ch.bailu.foc.Foc;
import ch.bailu.foc_android.FocAssetFactory;
import ch.bailu.foc_android.FocAndroidFactory;

public class ExampleActivity extends Activity {
    private int myRequestCode = 42;

    @Override
    protected void onActivityResult(int requestCode,
                                    int resultCode,
                                    Intent data) {
        if (requestCode == myRequestCode && resultCode == Activity.RESULT_OK) {
                Uri uri = data.getData();
                Foc saf = new FocAndroidFactory(this).toFoc(uri.toString());
                printFiles(saf);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Foc asset = new FocAssetFactory(this).toFoc("some/path/to/asset/file_or_directory");
        printFiles(asset);

        Foc file = new FocAndroidFactory(this).toFoc("/unix/path/to/file_or_directory");
        printFiles(file);
    }

    private void printFiles(Foc foc) {
        System.out.println(foc.getName());

        if (foc.isFile() && foc.canRead()) {
            InputStream reader = null;
            try {
                reader = foc.openR();
                printToConsole(reader);
            } catch (IOException e) {
            } finally {
                Foc.close(reader);
            }
        } else if (foc.isDir()) {
            foc.foreach(child -> printFiles(child));
        }
    }

    private void printToConsole(InputStream reader) throws IOException {
        StringBuilder builder = new StringBuilder();
        int c;
        while ((c = reader.read()) != -1) {
            builder.append((char) c);
        }
        System.out.println(builder);
    }
}

About

File or content - abstraction for file like objects

Resources

License

Stars

Watchers

Forks

Packages

No packages published