关于java中文件输入输出流的问题

极客站长 2012-12-15 11:12:23
一个简单的复制文件的程序,把e:/test1/java.doc 中的内容复制到 e:/test2/java.doc ,直接读取字节内容时可以完美复制,字体的格式什么的都可以复制成功。但是当我定义一个字符串变量str,使得str等于按字节读取的e:/test1/java.doc 文件中的内容后,再把str中的内容 输出到文件2中去,这时候文件2中就成了乱码了。
求解,是不是str 不应该是String 格式的,那应该是什么格式的
import java.io.*;
public class FileDemo {
public static void main (String[]args){
File source = new File("e:/test1/java.doc");
File target = new File("e:/test2/java.doc");
FileInputStream fis=null;
FileOutputStream fos=null;
try{
fis =new FileInputStream(source);
fos =new FileOutputStream(target);
byte[] bytes =new byte[1024];
int length;
while((length=fis.read(bytes))!=-1){
String str = new String(bytes,0,length);
System.out.println(str);

byte[] by = str.getBytes();
fos.write(by);
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
if(fis != null){
try{
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
if (fos != null){
try{
fos.close();
}catch (IOException e){
e.printStackTrace();
}
}
}


}

}
...全文
397 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
极客站长 2012-12-17
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
doc是二进制文件,并非简单文本文件,也就是里面有大量是无法解释为非标准字符的。 String是字符串,组装为字符串时需要将读取到的byte转为char,由于前面说了doc并非文本文件,所以转换char的过程会有大量转换失败从而变成“?”字符,当然再写入新文件中就不再是原样了。 所以复制的最佳做法就是用 byte[] 基于字节数组来做,而且注意不能用FileR……
复制功能我实现了,用你说的方法,我上面的程序实现想尝试下如何把doc文件的内容显示出来,如果能存在str里,也能就显示出来了,如果说真是要按二进制去读取的话,那么在终端里显示出来还能组装成原来的格式吗
极客站长 2012-12-17
  • 打赏
  • 举报
回复
引用 4 楼 ldh911 的回复:
“那么在终端里显示出来还能组装成原来的格式吗” 显示出来就意味着要字符画,那么基本上就没希望重新组装了。 另外,你没法直接把doc文件内容显示出来,因为它不是简单的“文本文件”。 你可以尝试用POI之类的可以操作doc文件的开源组件来做,它能帮你解析doc文件,然后提供给你存取其中内容的函数。 附:如果因为某些场合非得将二进制转为字符形式,可以将其BA……
谢谢,我试试!
MiceRice 2012-12-17
  • 打赏
  • 举报
回复
“那么在终端里显示出来还能组装成原来的格式吗” 显示出来就意味着要字符画,那么基本上就没希望重新组装了。 另外,你没法直接把doc文件内容显示出来,因为它不是简单的“文本文件”。 你可以尝试用POI之类的可以操作doc文件的开源组件来做,它能帮你解析doc文件,然后提供给你存取其中内容的函数。 附:如果因为某些场合非得将二进制转为字符形式,可以将其BASE64处理,需要还原时再反BASE64。
huntor 2012-12-16
  • 打赏
  • 举报
回复
使用FileChannel的transferTo/transferFrom。
MiceRice 2012-12-15
  • 打赏
  • 举报
回复
doc是二进制文件,并非简单文本文件,也就是里面有大量是无法解释为非标准字符的。 String是字符串,组装为字符串时需要将读取到的byte转为char,由于前面说了doc并非文本文件,所以转换char的过程会有大量转换失败从而变成“?”字符,当然再写入新文件中就不再是原样了。 所以复制的最佳做法就是用 byte[] 基于字节数组来做,而且注意不能用FileReader,而是必须用FileInputStream
内容概要:本文研究了基于DPWMA调制与正负序分离的ANPC三电平并网逆变器前馈控制策略,旨在解决传统三电平逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应速度不足等问题。通过采用有源点箝位(ANPC)三电平逆变器拓扑,结合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术和电网电压前馈控制,构建了一套一体化的高性能并网控制体系。该体系不仅优化了逆变器的开关动作机制,改善了输出电压电流的谐波特性,而且通过精确的相位同步和扰动补偿,显著提高了系统的动态响应能力和抗扰性能。仿真结果显示,所提出的控制策略能有效降低并网谐波含量,提升锁相精度与系统动态稳定性,确保在复杂电网工况下的高质量稳定并网。 适合人群:具备一定电力电子基础知识和仿真技能的研发人员,尤其是从事新能源发电、储能系统、柔性输电等领域研究的专业人士。 使用场景及目标:①研究和开发高性能并网逆变器,特别是针对大功率、高电能质量要求的应用场景;②探索如何通过先进的调制和控制策略来提高并网逆变器对电网扰动的适应性和响应速度;③为相关领域的学术研究和技术开发提供理论依据和实践指导。 阅读建议:建议读者结合实际的仿真软件(如MATLAB/Simulink)进行实践操作,以便更好地理解和掌握文提到的各种控制策略的具体实现方法。同时,鼓励读者关注最新的研究成果和发展趋势,不断深化对该领域的认识。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧