问题描述
importjava.io.*;publicclasstask_99_2{publicstaticvoidmain(Stringargs[])throwsIOException{Strings;RandomAccessFilerf=newRandomAccessFile("e:/Test1.txt","rw");RandomAccessFileraf=newRandomAccessFile("e:/Test2.txt","rw");rf.seek(rf.length());raf.seek(0);while((s=raf.readLine())!=null){rf.writeUTF(s);System.out.println(s);}rf.close();raf.close();}}
解决方案
解决方案二:
windows的换行并不是直接的"n",是"rn"。所以out.write("n")只能得到一个黑框,因为windos不认为这是个“换行”。直接从记事本输入的话,windows自动输入了"rn",所以从从文本文件中读出来的也是"rn",可以正常显示。那么这是为什么呢?稍微学过正则表达式的朋友都知道:r是回车符,而n是换行符。Windows默认n在文档中显示的是一个空格或者小黑框。所以,要先回车,再换行。
解决方案三:
同上在java里输出可以用n,在文件里要用rn
解决方案四:
你看一下javadoc就明白为啥了。writeUTF函数,会先往文件里面写两个byte,用来表示实际写出去的字节数例如写出去9个,就是[0,9]写出去300个,就是[1,44]就因为有了这两个byte,所以才有了你看到的方块啊,空白啊之类的PS:writeUTF并不输出回车换行之类的[code=HTML]writeUTFpublicfinalvoidwriteUTF(Stringstr)throwsIOExceptionWritesastringtothefileusingmodifiedUTF-8encodinginamachine-independentmanner.First,twobytesarewrittentothefile,startingatthecurrentfilepointer,asifbythewriteShortmethodgivingthenumberofbytestofollow.Thisvalueisthenumberofbytesactuallywrittenout,notthelengthofthestring.Followingthelength,eachcharacterofthestringisoutput,insequence,usingthemodifiedUTF-8encodingforeachcharacter.Specifiedby:writeUTFininterfaceDataOutputParameters:str-astringtobewritten.Throws:IOException-ifanI/Oerroroccurs.[code]
解决方案五:
windows里换行时rnlinux中是n
解决方案六:
引用3楼lilybelle的回复:
writeUTF函数,会先往文件里面写两个byte,用来表示实际写出去的字节数例如写出去 9个, 就是 [0,9]写出去300个,就是[1,44]就因为有了这两个byte,所以才有了你看到的方块啊,空白啊之类的
3楼正解!首先,你用readline来读,读进来的s里面是不含换行符的你又用writeUTF来写s入文件,本身又不写换行符所以这个问题,跟换行符根本没关系就是上面那个两个byte的问题
解决方案七:
小黑框没什么关系,如果想看清楚就"rn"好了
解决方案八:
引用5楼truediego的回复:
引用3楼lilybelle的回复:writeUTF函数,会先往文件里面写两个byte,用来表示实际写出去的字节数例如写出去 9个, 就是 [0,9]写出去300个,就是[1,44]就因为有了这两个byte,所以才有了你看到的方块啊,空白啊之类的3楼正解!首先,你用readline来读,读进来的s里面是不含换行符的你又用writeUTF来写s入文件,本身又不写换行符所以这个问题,跟换行符根本没关系就是上面那个两个byte的问题
我也这么认为
解决方案九:
关注一下
解决方案十:
顶三楼,说的很好
解决方案十一:
学习了...
解决方案十二:
各位楼主好!那我怎样去解决那个空格和黑框或者去掉他们,使得文件Test2的内容连续的追加到文件Test1的末尾呢?
解决方案十三:
谢谢大家了
解决方案十四:
直接write就是了如果你要指定写成UTF-8的文件,那就用OutputStreamWriter,指定charset就行了
解决方案十五:
谢谢你们了
解决方案:
packagecsdn;importjava.io.*;publicclassReadText{publicstaticvoidmain(Stringargs[])throwsIOException{Strings;//RandomAccessFilerf=newRandomAccessFile("Test2.txt","rw");//RandomAccessFileraf=newRandomAccessFile("Test1.txt","rw");BufferedReaderraf=newBufferedReader(newFileReader("Test1.txt"));OutputStreamWriterrf=newOutputStreamWriter(newFileOutputStream("Test2.txt"),"gb2312");//rf.seek(rf.length());//raf.seek(0);while((s=raf.readLine())!=null){//s=newString(s.getBytes("UTF-8"),"UTF-8");//rf.writeChars(s);rf.write(s);System.out.println(s);}rf.close();raf.close();}}
解决方案:
你的问题我又试了下发现Text1和Text2必须都是utf-8编码时才会出现lz说的情况!!如果是3#说的情况的话不应该这样吧!!!