为什么我向.txt文件写数据时,最后字符后面总是空一个和有一个小黑方框?

问题描述

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#说的情况的话不应该这样吧!!!

时间: 2024-07-30 16:30:39

为什么我向.txt文件写数据时,最后字符后面总是空一个和有一个小黑方框?的相关文章

MFC多线程创建文件写数据

问题描述 MFC多线程创建文件写数据 初始化线程时创建文件如下(以当前时间命名文件于当前进程的当前目录): if(hThread)//初始化线程 { cTime = cTime.GetCurrentTime(); tmp = cTime.Format(_T(""%Y%m%d%H%M%S"")); GetCurrentDirectory(MAX_PATH path);//返回当前进程的当前目录 str_file_netpath.Format(_T("&quo

C#中读取txt文件列数据并存入int数组中

问题描述 C#中读取txt文件列数据并存入int数组中 我有一个空间绘图的C#程序,txt文件中有三列点的坐标,每行数据由空格隔开,现在需要定义三个x,y,z 一维int数组并将txt文件中列数据赋给x,y,z,txt数据量很大,可能有上千组,希望能够得到代码并在程序中直接调用x[i],y[i],z[i] 解决方案 streamreader一行行读取,然后split按空格分割为数组,你就可以操作数组,转化为你要的数据了 解决方案二: 一行代码就够了: var data = File.ReadAl

asp.net向HTML文件写数据

问题描述 asp.net向HTML文件写数据 比如说有一个最原始的HTML文件,代码如下 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></ti

如何用Java编写读取txt文件中数据并播放出来的软件,该怎么弄???

问题描述 如何用Java编写读取txt文件中数据并播放出来的软件,该怎么弄?? 解决方案 解决方案二:播放出来?不懂解决方案三:javax.sound.midi结合java.io自己找文档看看

asp.net实现从Txt文件读取数据到数据视图的方法_实用技巧

本文实例讲述了asp.net实现从Txt文件读取数据到数据视图的方法.分享给大家供大家参考,具体如下: #region 从Txt文件读取数据到数据视图 /// 从Txt文件读取数据到数据视图 /// </summary> /// <param name="strExcelPath">文件路径</param> /// <returns>返回一个数据视图</returns> public static DataView GetDa

用 Txt文件 存储数据

问题描述 大婶们啊,帮帮我把,我想用TXT文件存储我的数据.有一个类,它有若干个属性,我想要每次实例化的数据,存到TXT文件中.下次启动的时候,也可以从TXT文件里读取这个对象的信息 解决方案 解决方案二:网上搜一下吧,一大把,现在的xml很好用,推荐解决方案三:数据结构..自己定义...比如一行一个属性,为什么不用xml呢?解决方案四:用txt好像会比较麻烦,你还是转到xml吧解决方案五:publicstaticvoidWriteTxt(stringfilePathName,boolappen

c#中向txt中写数据,只能写400k左右,是什么原因?

问题描述 我最近做一个小程序开发,数据量比较大,我发现当数据到400k左右的时候,程序就运行不了了,这是什么原因呢?请教高手指点啊!我写数据的函数如下privatestaticvoidAddText(FileStreamfs,stringvalue){byte[]info=newUTF8Encoding(true).GetBytes(value);fs.Write(info,0,info.Length);}应该没有什么问题吧? 解决方案 解决方案二:估计是你的FileStream本身处理方式不对

【java IO】使用Java输入输出流 读取txt文件内数据,进行拼接后写入到另一个文件中

1 package com.sxd.test.util; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 import java.io.InputStreamRea

在c#中如何把txt文件中数据(AT指令)一行一行读取出来并发送

问题描述 我用c#中的控制台应用程序做一个软件:GSM自动测试工具.与普通的串口助手的区别在于他可以自动测试. 但是我现在遇到了瓶颈:当我把发送区的AT指令保存以后再打开文件发送这些得到的回复是不对的.所以怎么能把保存的txt文本中的AT指令一条一条读取出来并且依次在得到接收区的回复指令ok后发送出去呢? 解决方案