文件上传接收过程中数据数据流的处理问题

问题描述:在使用流来接收文件的时候(比如接收txt文档)的时候,发现接收的文件显示出的大小是一致的,但是打开文件以后后边出现了空格。

之前的代码如下:

File filetemp = new File(dirPath,fileName);//根据路径和文件名称创建文件
if(!filetemp.exists()){//如果新的文件不存在,则创建文件
if(!filetemp.getParentFile().exists()){//如果目录不存在则先创建目录再创建文件
filetemp.getParentFile().mkdirs();
filetemp.createNewFile();
}else{
filetemp.createNewFile();
}
}
<***************************************************************************************************>
FileOutputStream fos = new FileOutputStream(filetemp);//获取对文件写入的流

byte[] buf = new byte[1024];

while( is.read(buf)>0){//将从文件读出的内容写入
fos.write(buf,0,buf.length);
}
fos.flush();

fos.close();

上边的代码中,星号分界线之前的部分是创建文件的过程,后边是将读到的内容写入到文件中的过程,前边的部分没有问题。下边的代码是有问题的,它实现的主要作用是:只要缓冲数组里边有内容,就将里边的内容写入到文件中。这样的话,如果buf数组里边的内容小于1024是,就会出现将空格内容写入到文件中的情况,如果是正常的文本还不影响观看,但是如果是对内容要求严格的文件类型,肯定会出问题,因此使用一个整形数来计算每次读取到多少内容,然后只将这些内容写入到文件中。修改如下。

FileOutputStream fos = new FileOutputStream(filetemp);//获取对文件写入的流

byte[] buf = new byte[1024];

                        int byteRead;

while(-1!=(byteRead = is.read(buf))){//将从文件读出的内容写入
fos.write(buf,0,byteRead);
}
fos.flush();

fos.close();

这样之后,写入到文件的内容正常了。于是乎来这边记录一下,以免后边再犯类似的错误。

互相学习,共同进步,谢谢大家!

猜你喜欢

转载自blog.csdn.net/Rolandcoder/article/details/79385354
今日推荐