java 怎么读取文件中的字符和数据

如果有一个txt文件,里面的数据组织如下:李明40:50:60:70:80刘胜45:55:65:75:85读取这个文件上的姓名与数字,输出到另一个txt文件上。提取数字,... 如果有一个txt文件,里面的数据组织如下:
李明 40:50:60:70:80
刘胜 45:55:65:75:85

读取这个文件上的姓名与数字,输出到另一个txt文件上。提取数字,并求出总和,要求输出姓名与数字的总和。

怎么实现呢?希望能给出代码或指点。用正则表达式又该怎么实现?
展开
 我来答
百度网友e82546a27
2010-03-18 · TA获得超过403个赞
知道小有建树答主
回答量:264
采纳率:100%
帮助的人:243万
展开全部
JDK版本 1.5
测试结果
result.txt 文件中的内容如下

李明 40:50:60:70:80
姓名:李明 总成绩:300
刘胜 45:55:65:75:85
姓名:刘胜 总成绩:625

不明白+QQ 379821283

代码如下:

package com.rabbit.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TestFile {
public static void main(String[] args) throws Exception{
//获得文件输入流 假设目标文件名为data.txt
FileInputStream fin = new FileInputStream("data.txt");
InputStreamReader inR = new InputStreamReader(fin);
BufferedReader bfR = new BufferedReader(inR);
//获得文件输出流 假设目标文件名为resutl.txt 追加方式
FileOutputStream fout = new FileOutputStream("resutl.txt",true);
OutputStreamWriter outW = new OutputStreamWriter(fout);
BufferedWriter bfW = new BufferedWriter(outW);

String temp = "";//临时缓存 保存读取到的每一行记录
String[] tempArr = {};//临时缓存 保存用空格拆分该行记录得到的数组
String name="";//临时缓存 保存姓名
String[] scoreTemp = {};//临时缓存 保存分数串拆分后得到的数组
int totalScore = 0;//临时缓存 总成绩
//开始读文件
while((temp=bfR.readLine())!=null){
//正则表达式拆分读取到的每行 拆分成 姓名+分数串
tempArr = temp.split("[ ]+");
//得到姓名
name = tempArr[0];
//正则表达式拆分分数串得到分数数组
scoreTemp = tempArr[1].split(":");
//循环分数数组 得到总成绩
for(int i=0;i<scoreTemp.length;i++){
totalScore += Integer.parseInt(scoreTemp[i]);
}
//写入结果文件
bfW.write(temp+"\r\n");
bfW.write("姓名:"+name+" 总成绩:"+totalScore+"\r\n");
}
//关闭流
bfR.close();
bfW.close();
}

}

测试正常
maye100
2015-06-05 · TA获得超过2650个赞
知道小有建树答主
回答量:1341
采纳率:100%
帮助的人:977万
展开全部

  java中所有数据的传输都是通过字节流的形式,包括文件或图片。

  那么当你要读取一个文件时,首先将文件的绝对路径告诉java,调用对应的api就可以拿到该文件的字节流,下面是一段读取xml文件的例子

        SAXReader reader = new SAXReader();
        Document document = null;
        try {
            InputStream in = this.getClass().getResourceAsStream(xmlPath); 
            document = reader.read(in);
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }

  在这段代码中的SAXReader和Document是xml的工具类,无视就好了。

  重点是InputStream in = this.getClass().getResourceAsStream(xmlPath); 这句

  xmlPath就是文件的绝对路径,比如D:/abc/test.xml

  InputStream就是该文件的输入流,接下来就可以通过它得到文件里的数据,或者转存到其他地方。

  更多信息可以参看我的个人网站,详细介绍了I/O:

  http://www.mayee.net/blog/blogPage?b=4b570dfe3d8c4d47b71e65d729a99ced

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
charlie7948
2010-03-18 · 超过25用户采纳过TA的回答
知道答主
回答量:132
采纳率:66%
帮助的人:46.7万
展开全部
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class readStudentScore {
public static void main(String[] args) {

File in=new File("d:/1.txt");//成绩保存的文件。
File out=new File("d:/2.txt");//结果保存的文件
try {
BufferedReader br=new BufferedReader(new FileReader(in));//构造文件过滤流
BufferedWriter bw=new BufferedWriter(new FileWriter(out));//
String temp=new String();
while((temp=br.readLine())!=null){
String[]str=temp.split(" ");//以空格来划分姓名和成绩这两个字段
String name=str[0];
String[]score=str[1].split(":");//此处匹配的是全角的冒号,视情况自己改。
float scoreAll=0;
for(int i=0;i<score.length;i++){
scoreAll+=Float.valueOf(score[i]);//计算总成绩
}
String outStr=name+" "+scoreAll;
System.out.println(outStr);
bw.write(outStr);//把结果写入缓冲流
bw.newLine();//换行
bw.flush();//把缓冲流中数据写入文件
}
bw.close();//关闭流
br.close();
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刹那轻狂
2010-03-17 · TA获得超过273个赞
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:177万
展开全部
可以使用 Scanner 这个类~ Scanner 类是以个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。 具体看下java api~ 下面给你一小段代码

//将一个File对象作为Scanner的构造器参数,则Scanner读取文件内容
Scanner sc = new Scanner(new File("a.txt"));
System.out.println("a.txt文件内容如下:");
//判断是否还有下一行
while(sc.hasNextLine())
{
//输出文件中的一行
System.out.println(sc.nextLine());
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式