Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import android.content.ContentResolver;
import android.content.Context;

import android.net.Uri;

public class Main {
    /**
     * Return an {@link InputStream} from the given uri. ( can be a local content, a file path or an http url )
     * 
     * @param context
     * @param uri
     * @return the {@link InputStream} from the given uri, null if uri cannot be opened
     */
    public static InputStream openInputStream(Context context, Uri uri) {
        if (null == uri)
            return null;
        final String scheme = uri.getScheme();
        InputStream stream = null;
        if (scheme == null || ContentResolver.SCHEME_FILE.equals(scheme)) {
            // from file
            stream = openFileInputStream(uri.getPath());
        } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
            // from content
            stream = openContentInputStream(context, uri);
        } else if ("http".equals(scheme) || "https".equals(scheme)) {
            // from remote uri
            stream = openRemoteInputStream(uri);
        }
        return stream;
    }

    /**
     * Return a {@link FileInputStream} from the given path or null if file not found
     * 
     * @param path
     *           the file path
     * @return the {@link FileInputStream} of the given path, null if {@link FileNotFoundException} is thrown
     */
    static InputStream openFileInputStream(String path) {
        try {
            return new FileInputStream(path);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Return a {@link BufferedInputStream} from the given uri or null if an exception is thrown
     * 
     * @param context
     * @param uri
     * @return the {@link InputStream} of the given path. null if file is not found
     */
    static InputStream openContentInputStream(Context context, Uri uri) {
        try {
            return context.getContentResolver().openInputStream(uri);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Return an {@link InputStream} from the given url or null if failed to retrieve the content
     * 
     * @param uri
     * @return
     */
    static InputStream openRemoteInputStream(Uri uri) {
        java.net.URL finalUrl;
        try {
            finalUrl = new java.net.URL(uri.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        }

        HttpURLConnection connection;
        try {
            connection = (HttpURLConnection) finalUrl.openConnection();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        connection.setInstanceFollowRedirects(false);
        int code;
        try {
            code = connection.getResponseCode();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        // permanent redirection
        if (code == HttpURLConnection.HTTP_MOVED_PERM || code == HttpURLConnection.HTTP_MOVED_TEMP
                || code == HttpURLConnection.HTTP_SEE_OTHER) {
            String newLocation = connection.getHeaderField("Location");
            return openRemoteInputStream(Uri.parse(newLocation));
        }

        try {
            return (InputStream) finalUrl.getContent();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}