2011-05-20 3 views
0

вот маленький код. Этот класс работает на двух компьютерах, одна сторона отправляет файл (send()), а другой получает его (read()). Я знаю, что send() работает, потому что, когда я запускаю школьное решение (его назначение), он может скачать файл у меня, но по какой-то причине, когда я пытаюсь загрузить файл, создается (конструктором), но чтение ничего не пишет в файл.не удается передать файл через сокет, java

public class SendFile extends BasicMessage implements Message{ 

private File _file; 

public SendFile(CommandEnum caption){ 
    super(caption); 
} 

public SendFile(String file){ 
    super(CommandEnum.FILE); 
    _file = new File(FMDataManager.instance().getSharedDirectory(),file); 
} 

public void send (DataOutputStream out) throws IOException{ 
    out.writeUTF(_caption.toString()); 
    out.writeLong(_file.length()); 
    FileInputStream fis = new FileInputStream(_file); 
    BufferedInputStream bis = new BufferedInputStream(fis); 
    for (int i=0; i<_file.length(); i++) 
     out.write(bis.read()); 
    out.writeUTF(CommandEnum.END.toString()); 
} 

public void read(DataInputStream in) throws IOException{ 
    FileOutputStream fos = new FileOutputStream(_file); 
    BufferedOutputStream bos = new BufferedOutputStream(fos); 
    in.readUTF(); 
    long size = in.readLong(); 
    for (int i=0; i<size; i++) 
     bos.write(in.read()); 
    System.out.println(in.readUTF()); 
} 

} 

любые идеи? спасибо

ответ

0

Вы должны закрыть свои потоки, чтобы убедиться, что это правильно. В вашем конкретном случае содержимое файла, вероятно, все еще находится внутри BufferedOutputStream.

+0

как вы можете видеть, я получаю потоки данных в качестве аргументов в этом методе. этот поток позже закрыт в том же классе, который был создан, вы все еще думаете, что это может быть проблемой? – yotamoo

+0

Вы были правы, спасибо – yotamoo

Смежные вопросы