?? hilorxfilecliente.java
字號:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package controlador;import java.io.*;import java.net.*;import java.util.Observable;import java.util.logging.Level;import java.util.logging.Logger;import vista.dialogoProgresoArchivo;/** *clase-hilo que recibe un archivo desde el servidor. * @author Camilo Andres */public class hiloRXFileCliente extends Observable implements Runnable{ private Socket conRXFile; private String rutaArchivo; private ObjectOutputStream salidaDatos; private ObjectInputStream entradaDatos; dialogoProgresoArchivo dialogo; /** * constructor que recibe como parametro el socket con el * @param conRXFile * @param rutaArchivo * @throws java.io.IOException */ public hiloRXFileCliente(Socket conRXFile, String rutaArchivo) throws IOException { this.conRXFile = conRXFile; this.rutaArchivo = rutaArchivo; salidaDatos=new ObjectOutputStream(conRXFile.getOutputStream()); entradaDatos=new ObjectInputStream(conRXFile.getInputStream()); } public void run() { //flujo de entrada de los datos del archivo, se usa para leer el archivo. BufferedOutputStream fout = null; try { //avisa al que va a transmitir el archivo que ya esta listo //para recibierlo.. salidaDatos.writeObject("LISTO"); long sizeFile = (Long) entradaDatos.readObject(); int TAM_BLOQUE = (Integer) entradaDatos.readObject(); //cuadro de dialogo donde se muestra el proceso de la descarga. dialogo=new dialogoProgresoArchivo(rutaArchivo, sizeFile); //a?ade a esta clase que es observable el observador que //sera el dialogo que se acabo decrear. addObserver(dialogo); System.out.println("T=" + sizeFile + " :N=" + TAM_BLOQUE); File f = new File("files\\" + rutaArchivo); fout = new BufferedOutputStream(new FileOutputStream(f)); //se va a enviar el archivo en bloques de 100 bytes. //se calcula cuantos bloque hay, int numBloques = (int) (sizeFile/TAM_BLOQUE); //los byte que sobren que no alcancen a formar un bloque. int tamResto = (int) (sizeFile%TAM_BLOQUE); //lee los numBloques bloques del archivo y los envia. long bytesRecibidos=0; for (int i = 0; i < numBloques; i++) { //Almacena el arreglo de TAM_BLOQUE los bytes en el archivo byte[] datos = (byte[]) entradaDatos.readObject(); //Almacena el arreglo de TAM_BLOQUE los bytes en el archivo fout.write(datos); bytesRecibidos+=TAM_BLOQUE; setChanged();notifyObservers(bytesRecibidos); System.out.println(i+"-"+bytesRecibidos+" de "+ sizeFile); } //hay que recibir el sobrante, escribirlo en el archivo byte[] datos = (byte[]) entradaDatos.readObject(); fout.write(datos); fout.close(); setChanged();notifyObservers(sizeFile); } catch (IOException ex) { Logger.getLogger(hiloRXFileCliente.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(hiloRXFileCliente.class.getName()).log(Level.SEVERE, null, ex); } finally { try { fout.close(); } catch (IOException ex) { Logger.getLogger(hiloRXFileCliente.class.getName()).log(Level.SEVERE, null, ex); } } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -