java outputstream初始化_使用Java从FileOutputStream创建和写入文件

好的,所以我正在开发一个项目,在该项目中,我使用Java程序来初始化两个类(FileSender和FileReceiver)之间的套接字连接.我的基本想法是FileSender看起来像这样:

try {

writer = new DataOutputStream(connect.getOutputStream());

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//While we have bytes to send

while(filein.available() >0){

//We write them out to our buffer

writer.write(filein.read(outBuffer));

writer.flush();

}

//Then close our filein

filein.close();

//And then our socket;

connect.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

构造函数包含用于检查文件是否存在以及套接字是否已连接等的代码.在我的FileReader里面是这样的:

input = recvSocket.accept();

BufferedReader br = new BufferedReader(new InputStreamReader(input.getInputStream()));

FileOutputStream fOut= new FileOutputStream(filename);

String line = br.readLine();

while(line != null){

fOut.write(line.getBytes());

fOut.flush();

line = br.readLine();

}

System.out.println("Before RECV close statements");

fOut.close();

input.close();

recvSocket.close();

System.out.println("After RECV clsoe statements");

全部位于try-catch块中.所以,我想做的是让FileSender读取文件,转换为字节,发送并刷新它. FileReceiver,然后读入字节,写入fileOut,刷新并继续等待更多内容.我确保关闭所有打开的东西,所以…这是奇怪的部分.

当我尝试在Eclipse中打开创建的文本文件时,它告诉我“发生了SWT错误.建议退出工作台…有关更多详细信息,请参见.log.”.弹出另一个窗口,显示“未处理的事件循环异常,(没有更多的句柄)”.但是,如果我尝试在notepad2中打开发送的文本文件,则会得到

ThisIsASentTextfile

很好(嗯,减去应该有换行符的事实,但是我正在努力…).有人知道为什么会这样吗?当我们检查时,如何添加换行符?

(这是在没有其他库的情况下通过Java传输文件的特别糟糕的方法吗?)

编辑:更新:我将代码更改为以下(FileReceiver),而未更改发送方:

try {

input = recvSocket.accept();

//InputStream br = new InputStream(input.getInputStream());

FileWriter fOut= new FileWriter(filename);

//BufferedWriter out = new BufferedWriter(fOut);

//String line = br.

byte info = (byte) input.getInputStream().read();

while((int)info != 0){

fOut.write(info);

fOut.flush();

info = (byte) input.getInputStream().read();

}

fOut.flush();

System.out.println("Before RECV close statements");

fOut.close();

//input.close();

recvSocket.close();

System.out.println("After RECV clsoe statements");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

这可行.我得到一个文本文件,该文件的字节大小正确(在获得4Kb标准大小之前),并且具有正确的格式.接下来,我将在图像上进行尝试,并保持更新.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值