【java的io流】复制文本内容出现小问题
问题有3:出现问号,字符间都插入空格,不换行代码:importjava.io.File;importjava.io.FileReader;importjava.io.Fi...
问题有3:出现问号,字符间都插入空格,不换行
代码:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class LrcReader {
public static void main(String args[])throws IOException{
read();
}
public static void read() throws IOException{
String path="E:/readme.lrc";
FileReader fr=null;
FileWriter fw=null;
try {
File file=new File(path);
fr=new FileReader(path);
fw=new FileWriter("E:/copy.lrc");
char[] buf=new char[(int) file.length()];
while(fr.read(buf)!=-1){
fw.write(buf);
}
} catch (IOException e) {
//打印错误信息
}finally{
i f(fr!=null){
try {
fr.close();
} catch (IOException e2) {
// TODO: handle exception
}
}if(fw!=null){
try {
fw.close();
} catch (IOException e2) {
// TODO: handle exception
}
}
}
}
} 展开
代码:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class LrcReader {
public static void main(String args[])throws IOException{
read();
}
public static void read() throws IOException{
String path="E:/readme.lrc";
FileReader fr=null;
FileWriter fw=null;
try {
File file=new File(path);
fr=new FileReader(path);
fw=new FileWriter("E:/copy.lrc");
char[] buf=new char[(int) file.length()];
while(fr.read(buf)!=-1){
fw.write(buf);
}
} catch (IOException e) {
//打印错误信息
}finally{
i f(fr!=null){
try {
fr.close();
} catch (IOException e2) {
// TODO: handle exception
}
}if(fw!=null){
try {
fw.close();
} catch (IOException e2) {
// TODO: handle exception
}
}
}
}
} 展开
2个回答
展开全部
package tool;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class LrcReader
{
public static void main ( String args[] ) throws IOException
{
read ();
}
public static void read () throws IOException
{
String path = "一场游戏一场梦.lrc";
FileInputStream fis = null;
InputStreamReader isr = null;
FileOutputStream fos = null;
OutputStreamWriter osw = null;
try
{
fis = new FileInputStream (path);
isr = new InputStreamReader (fis, "gbk");
fos = new FileOutputStream ("恭喜发财.lrc");
osw = new OutputStreamWriter (fos, "gbk");
int size = -1;
while (( size = isr.read () ) != -1)
{
osw.write (size);
}
osw.flush ();
}
catch (IOException e)
{
System.err.println (e.toString ());
}
finally
{
if (null != osw)
{
osw.close ();
}
if (null != fos)
{
fos.close ();
}
if (null != isr)
{
isr.close ();
}
if (null != fis)
{
fis.close ();
}
}
}
}
更多追问追答
追问
这个跑起来和上面结果一样的,能不能在读取的时候去掉一些特殊字符,我觉得这里面有一些看不到的东西。
追答
不知道是不是乱码啊,不过你可以换个lrc文件看看啊
展开全部
没遇到过这种问题,而且我把你的程序在我的机器上跑了次,发现很正常,没有出现你说的问题?不清楚是不是由于你的文件的问题,或者你可以试下字节流
追问
这个好像是文件的问题,
但是代码有一个小bug:
char[] buf=new char[(int) file.length()]; 实际的长度会比这个少,也就是说复制后的文本会有几个空字节,这个是什么问题你知道吗?
追答
首先在使用的过程中,最好不要跟据文件的大小来设置这个缓存的大小,因为很可能出现如果文件很多,你一次性分配个大的缓存会导致JVM内存不够,常用的方法是使用一个1024字节或者其倍数的缓存,然后使用read(byte[])这种直接读到缓存的方式来copy,网上很多,可以去参考下。
至于你说的复制后的文本会多空字节,按程序逻辑来说应该不会,除非是你原文件中有空字节,包括回车换行这些。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询