Carga de archivos Java mediante socket, ¿se requiere un porcentaje del archivo cargado?

Hola, estoy cargando un archivo al servidor usando el socket y necesito el porcentaje de archivo cargado, ¿cómo puedo hacer eso? Tengo el valor máximo, es decir, la longitud del archivo, ¿cómo puedo obtener la cantidad de archivo que se ha cargado?

FileInputStream fis = new FileInputStream(fil);
                BufferedInputStream in = new BufferedInputStream(fis);
                BufferedOutputStream out = new BufferedOutputStream(skt.getOutputStream());

                //Write the file to the server socket           
                int i;

                while ((i = in.read()) != -1) {
                    publishProgress(???);
                    out.write(i);                   
                    System.out.println(i);
                }

Necesito pasar la longitud del archivo cargado en el método publishingProgress.

Respuesta 1

utilizando copia almacenada

FileInputStream fis = new FileInputStream(fil);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(skt.getOutputStream());

//Write the file to the server socket
int i;
int written = 0;
byte[] buf = new byte[512];

while ((i = in.read(buff)) != -1) {  

    out.write(buff,0,i);
    written += i;
    publishProgress((double)written/length);
    //passing a double value from 0-1 to say how much is transmitted (length is length of file)
    System.out.println(buff+", "+i);
}
Respuesta: 2

Para hacer esto, debe hacer una de las siguientes cosas:

  1. Utilice un cargador de Flash como swfupload(ver http://demo.swfupload.org/Documentation/ ) ya que estos normalmente proporcionan acceso para cargar el progreso de este tipo.
  2. Proporcione un canal posterior propio: realice el envío del formulario con Ajax y luego, mientras se realiza el envío del formulario, ejecuta un temporizador de JavaScript que golpea una URL en el servidor con una clave de algún tipo que corresponde a la carga. La URL en el servidor busca la cantidad del archivo que se ha cargado y devuelve ese número y lo pasa a su uploadProgressmétodo.
Respuesta: 3

A continuación se muestra su código modificado. escrito contiene el número de entradas escritas en el socket.

FileInputStream fis = new FileInputStream(fil);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(skt.getOutputStream());

//Write the file to the server socket           
int i;
int written = 0;

while ((i = in.read()) != -1) {  

    out.write(i);               
    publishProgress(++written);
    System.out.println(i);
}
Respuesta: 4

En java estoy escribiendo algunos objetos DTO, que todos heredan de AllocationDTO. Luego se pasa una lista de estos objetos a un objeto DAO para guardar en la base de datos. Dependiendo de qué subtipo de ...

He desarrollado una aplicación en la que busco libros mediante la búsqueda de googleapibook. Tengo un isbn no. Ahora quiero dejar que mi usuario lea ese libro página por página. Pero no encontré ningún método o solución para ...

Posible duplicado: ¿Cómo configuro las variables de entorno de Java? ¿Cómo puedo configurar LD_LIBRARY_PATH desde una aplicación Java?

Pude descargar este formulario en mi tarjeta sd (desde una URL determinada): mi aplicación puede acceder a este formulario a través de la vista web de Android. Mi pregunta es cómo guardarlo en un archivo de texto después de que un usuario haya completado los datos en ...