Java tutorial
//package com.java2s; /* Copyright (C) 2011 [Gobierno de Espana] * This file is part of "Cliente @Firma". * "Cliente @Firma" is free software; you can redistribute it and/or modify it under the terms of: * - the GNU General Public License as published by the Free Software Foundation; * either version 2 of the License, or (at your option) any later version. * - or The European Software License; either version 1.1 or (at your option) any later version. * Date: 11/01/11 * You may contact the copyright holder at: soporte.afirma5@mpt.es */ import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; public class Main { private static final int BUFFER_SIZE = 4096; /** Obtiene el flujo de entrada de un fichero (para su lectura) a partir de su URI. * @param uri URI del fichero a leer * @return Flujo de entrada hacia el contenido del fichero * @throws IOException Cuando no se ha podido abrir el fichero de datos. */ public static InputStream loadFile(final URI uri) throws IOException { if (uri == null) { throw new IllegalArgumentException("Se ha pedido el contenido de una URI nula"); //$NON-NLS-1$ } if (uri.getScheme().equals("file")) { //$NON-NLS-1$ // Es un fichero en disco. Las URL de Java no soportan file://, con // lo que hay que diferenciarlo a mano // Retiramos el "file://" de la uri String path = uri.getSchemeSpecificPart(); if (path.startsWith("//")) { //$NON-NLS-1$ path = path.substring(2); } return new FileInputStream(new File(path)); } // Es una URL final InputStream tmpStream = new BufferedInputStream(uri.toURL().openStream()); // Las firmas via URL fallan en la descarga por temas de Sun, asi que // descargamos primero // y devolvemos un Stream contra un array de bytes final byte[] tmpBuffer = getDataFromInputStream(tmpStream); return new java.io.ByteArrayInputStream(tmpBuffer); } /** Lee un flujo de datos de entrada y los recupera en forma de array de * bytes. Este método consume pero no cierra el flujo de datos de * entrada. * @param input * Flujo de donde se toman los datos. * @return Los datos obtenidos del flujo. * @throws IOException * Cuando ocurre un problema durante la lectura */ public static byte[] getDataFromInputStream(final InputStream input) throws IOException { if (input == null) { return new byte[0]; } int nBytes = 0; final byte[] buffer = new byte[BUFFER_SIZE]; final ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((nBytes = input.read(buffer)) != -1) { baos.write(buffer, 0, nBytes); } return baos.toByteArray(); } }