有关Java 文件读取中换行的问题

为何每次运行这个函数后所得到的新文件中,原来的内容每行第一个字符没有读入,例如原文件为:10000abc1231005.12调用该函数并添加新的文本后,此文件就变为:10... 为何每次运行这个函数后所得到的新文件中,原来的内容每行第一个字符没有读入,例如原文件为:
10000

abc
123
100
5.12
调用该函数并添加新的文本后,此文件就变为:
1000

bc
23
00
.12

......

public void addStock(JMenuBar jmb){
String fileName ="C:\\Stock.doc";
String temp1,temp2,temp3,temp4;
String balance="";
StringBuffer content = new StringBuffer();
float n,f1,f2;

temp1=JOptionPane.showInputDialog("Please input stock name");
temp2=JOptionPane.showInputDialog("Please input stock code");
temp3=JOptionPane.showInputDialog("Please input how many shares you buy");
n=Float.parseFloat(temp3);
temp4=JOptionPane.showInputDialog("Please input share price");
f1=Float.parseFloat(temp4);

try{
BufferedReader in = new BufferedReader(new FileReader(fileName));
balance=in.readLine();
while(in.read()!=-1){
content.append(in.readLine()+'\n');
}
in.close();
}
catch(IOException ioe){
System.out.println("Problem reading "+fileName);
}
f2=Float.parseFloat(balance);
if(f2-f1*n<0){
JOptionPane.showMessageDialog(jmb,"Not enough balance!");
return;
}

try{
BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
out.write(new String().valueOf(f2-f1*n));
out.newLine();
out.write(new String(content));
out.newLine();
out.write(temp1);
out.newLine();
out.write(temp2);
out.newLine();
out.write(temp3);
out.newLine();
out.write(temp4);
out.newLine();
out.close();
}
catch(IOException ioe){
System.out.println("Problem writing C:\\Stock.doc");
}
}
展开
 我来答
pieryon
2015-05-21 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166869
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
Java读取文件涉及的换行符问题
首先需要把数据库中的多列导出成txt文本,然后java代码读取该文件,通过readline读取每一行,再通过"\t" 分割spit每一列数据,分别对其进行处理。
结果读取每一行的时候发现本来在一行的数据分成了两行,查找原因发现,原来是数据库列中的数据本身已存在换行符,这就需要在导出数据的时候对该列进行一个去除换行符的操作。
REPLACE(title, "\r\n", "")
解决办法如下:

java \r\n 或者 \n
mysql,javascript \r\n
windows下的文本换行符是 \r\n
unix下的文本换行符是 \n
chnsy
2007-12-04
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
try{
BufferedReader in = new BufferedReader(new FileReader(fileName));
balance=in.readLine();
while(in.read()!=-1){ //注
content.append(in.readLine()+'\n');
}
注:
这里的in.read()每次都会读入一个字符,从而使文件指针向后一位,你试着把这个循环换成
while((st=in.readLine())!=null) //这里st在前定义为String
{
content.addend(st+"\n")
}
再试试行不
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bearfig
2007-12-04 · TA获得超过877个赞
知道大有可为答主
回答量:1074
采纳率:0%
帮助的人:1118万
展开全部
这里错了:
BufferedReader in = new BufferedReader(new FileReader(fileName));
balance=in.readLine();
while(in.read()!=-1){
content.append(in.readLine()+'\n');
}
in.close();
}
这样写吧:
String inputLine;
while ((inputLine = in.readLine()) != null) {
content.append(inputLine+"\n");
}

原因;
while(in.read()!=-1)
这里会读一个字符进来,然后指针会后移一个字符,所以出现你的现象。
注意,每次读取Buffer里面的东西都会导致指针后移。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丫丫蓝蓝
2007-12-04 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:45.2万
展开全部
BufferedReader in = new BufferedReader(new FileReader(fileName));
而:FileWriter(File file)中的参数是File的,而你的filename只是个String,应该先把它弄成一个实例,再传递过去:
File file = new File(fileName);
BufferedReader in = new BufferedReader(new FileReader(file));
.....
while((balance=in.readLine())!=null){
content=new StringBuffer(balance);//之前的content是这样声明的:StringBuffer content = null;
content.append(inputLine+"\n");
}
...
f2=Float.parseFloat(balance);//这里有问题,但不怎么懂你的意思 你自己改 我运行的时候把它注释掉了的 嘿嘿
...
if(content!=null)
out.write(new String(content));
...
基本上没改什么了 估计不是你想要的结果(-_-)
拿2分闪人...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式