接触java语言要使用到读取文件一些知识,搜索到一些例子,自己好好体会一下,自己整理了出来就贴在这里吧.希望大家勿喷.
例子:
/*Java文件操作:按行读取和写入
文件操作是任何语言中最为常用的部分,Java也不例外。这里主要介绍按行读取的文件操作和写入
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class JavaFile
{
public static void main(String[] args)
{
try
{
// read file content from file
StringBuffer sb = new StringBuffer("");
FileReader reader = new FileReader("c://testRead.txt");
BufferedReader br = new BufferedReader(reader);
String str = null;
while ((str = br.readLine()) != null)
{
sb.append(str + "\n");
System.out.println(str);
}
br.close();
reader.close();
// write string to file
FileWriter writer = new FileWriter("c://testWrite.txt");
BufferedWriter bw = new BufferedWriter(writer);
bw.write(sb.toString());
bw.close();
writer.close();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
例子:
/*
* 这是百度知道里面的一个问题:我觉得不错,自己也运行修改了一下,就发布一下以后备用.
* 题目:java 按行读取txt文件的数字
* 文件file4.txt中(数据是按行排列的,每行一个数值)
* 1234
* 90.7
* 78.8
* 4567
* 87.3
* 65.6
*现在要建立一个数组double类型,把file4中所有的数字都写入到这个数组中,请问该怎么编写,谢谢。
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class test
{
public static double[] writeToDat(String path)
{
File file = new File(path);
List<String> list = new ArrayList<String>();
double[] nums = null;
try
{
BufferedReader bw = new BufferedReader(new FileReader(file));
String line = null;
// 因为不知道有几行数据,所以先存入list集合中
while ((line = bw.readLine()) != null)
{
list.add(line);
}
bw.close();
} catch (IOException e)
{
e.printStackTrace();
}
// 确定数组长度
nums = new double[list.size()];
for (int i = 0; i < list.size(); i++)
{
String s = list.get(i);
nums[i] = Double.parseDouble(s);
}
return nums;
}
public static void main(String[] args)
{
String path = "d:/file4.txt";
double[] nums = writeToDat(path);
for (int i = 0; i < nums.length; i++)
{
System.out.println(nums[i]);
}
}
}
第二个例子个人比较喜欢,这个例子复杂多了.各位请看:
/*
* JAVA中如何读取TXT文件数据并计算。。。。帮帮我吧
要用JAVA写个东西读取TXT中的数据 且要计算出平均值和总值 最后还要按总值排序。 有高手帮帮我吗? 先谢谢了
TXT的文件如下
学号 姓名 语文 数学 英语 平均值 总值 排序
1 李守东 83 73 75
2 徐贤坤 58 58 87
3 钱云宋 41 86 90
4 陈平 83 43 65
5 金荣权 93 88 63
6 陈如棉 99 93 43
7 章可可 98 62 72
8 陈伟奔 87 43 76
9 张如祥 69 58 78
10 丁尚游 80 56 57
11 林宏旦 91 90 76
12 曾上腾 100 96 54
13 谢作品 82 100 55
14 温从卫 73 46 101
15 李明察 81 41 75
16 彭鸿威 46 46 89
17 翁文秀 57 43 58
18 陈家伟 63 58 98
19 温正考 100 64 57
20 周文湘 50 50 79
21 吴杰 65 65 83
22 赖登城 60 79 53
23 聂树露 51 76 45
24 张雅琴 68 95 56
25 曾瑞约 88 63 58
26 王志强 96 79 78
27 徐贤所 66 46 74
28 陈祥枭 82 96 91
29 温婷婷 41 73 96
30 应孔余 66 81 71
31 宋成取 71 68 62
32 黄益省 65 56 43
33 陈思文 55 100 44
34 上官福新 64 62 70
35 钟国横 49 69 56
36 林型涨 78 73 50
各位大哥 能详细点嘛?我才学JAVA 属菜的不能再菜的。。。能给个写好的吗?
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class test
{
public static void main(String[] args)
{
// 传入参数为文件目录
GetDataProcess("d:/a.txt");
}
public static void GetDataProcess(String filePath)
{
BufferedReader br = null;
try
{
br = new BufferedReader(new FileReader(filePath));
} catch (FileNotFoundException e)
{
e.printStackTrace();
return;
}
String[] columnName =
{ "Id", "Name", "Languages", "Math", "English" }; // 列名
int[] courseIndexs =
{ 2, 3, 4 }; // 课程对应的列
int i, j, index;
String line;
List<Map<String, Object>> students = new ArrayList<Map<String, Object>>();
// 记录Id和总值,用于排序
List<Map<String, Object>> sortList = new ArrayList<Map<String, Object>>();
try
{
br.readLine(); // 去掉第一行
while ((line = br.readLine()) != null)
{
index = 0;
String[] se = line.split(" ");
Map<String, Object> student = new HashMap<String, Object>();
for (i = 0; i < se.length; i++)
{
if ("".equals(se[i]))
{
continue;
}
if (index >= columnName.length)
{
continue;
}
student.put(columnName[index], se[i]);
index++;
}
// 计算平均值,总值
double total = 0;
for (j = 0; j < courseIndexs.length; j++)
{
total += Double.parseDouble((String) student
.get(columnName[courseIndexs[j]]));
}
double average = total / courseIndexs.length;
// 只取一位小数
average = Math.round(average * 10) / 10;
student.put("Total", total);
student.put("Average", average);
Map<String, Object> sort = new HashMap<String, Object>();
sort.put("Id", student.get("Id"));
sort.put("Total", student.get("Total"));
sortList.add(sort);
students.add(student);
}
br.close();
// 排序
for (i = 0; i < sortList.size(); i++)
{
for (j = i + 1; j < sortList.size(); j++)
{
if ((Double) sortList.get(i).get("Total") < (Double) sortList
.get(j).get("Total"))
{
Map<String, Object> temp = sortList.get(i);
sortList.set(i, sortList.get(j));
sortList.set(j, temp);
}
}
}
Map<Object, Integer> sortedId = new HashMap<Object, Integer>();
for (i = 0; i < sortList.size(); i++)
{
sortedId.put(sortList.get(i).get("Id"), i + 1);
}
// 设定序号
for (j = 0; j < students.size(); j++)
{
students.get(j).put("Order",
sortedId.get(students.get(j).get("Id")));
}
// 输出(写到原文件)
// PrintWriter pw = new PrintWriter(new File(filePath));
// 输出(写到其他文件)
PrintWriter pw = new PrintWriter(new File("D:/b.txt"));
pw.println("Id\tName\tLan\tMath\tEnglish\tAverage\tTotal\tSort");
int cIndex;
for (i = 0; i < students.size(); i++)
{
Map<String, Object> st = students.get(i);
cIndex = 0;
pw.println(st.get(columnName[cIndex++]) + "\t"
+ st.get(columnName[cIndex++]) + "\t"
+ st.get(columnName[cIndex++]) + "\t"
+ st.get(columnName[cIndex++]) + "\t"
+ st.get(columnName[cIndex++]) + "\t" + st.get("Total")
+ "\t" + st.get("Average") + "\t" + st.get("Order"));
}
pw.flush();
pw.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
/*
最后生成文件"b.txt"的内容如下:
Id Name Lan Math English Average Total Sort
1 李守东 83 73 75 231.0 77.0 9
2 徐贤坤 58 58 87 203.0 67.0 21
3 钱云宋 41 86 90 217.0 72.0 15
4 陈平 83 43 65 191.0 63.0 29
5 金荣权 93 88 63 244.0 81.0 5
6 陈如棉 99 93 43 235.0 78.0 7
7 章可可 98 62 72 232.0 77.0 8
8 陈伟奔 87 43 76 206.0 68.0 19
9 张如祥 69 58 78 205.0 68.0 20
10 丁尚游 80 56 57 193.0 64.0 27
11 林宏旦 91 90 76 257.0 85.0 2
12 曾上腾 100 96 54 250.0 83.0 4
13 谢作品 82 100 55 237.0 79.0 6
14 温从卫 73 46 101 220.0 73.0 11
15 李明察 81 41 75 197.0 65.0 25
16 彭鸿威 46 46 89 181.0 60.0 31
17 翁文秀 57 43 58 158.0 52.0 36
18 陈家伟 63 58 98 219.0 73.0 12
19 温正考 100 64 57 221.0 73.0 10
20 周文湘 50 50 79 179.0 59.0 32
21 吴杰 65 65 83 213.0 71.0 16
22 赖登城 60 79 53 192.0 64.0 28
23 聂树露 51 76 45 172.0 57.0 34
24 张雅琴 68 95 56 219.0 73.0 13
25 曾瑞约 88 63 58 209.0 69.0 18
26 王志强 96 79 78 253.0 84.0 3
27 徐贤所 66 46 74 186.0 62.0 30
28 陈祥枭 82 96 91 269.0 89.0 1
29 温婷婷 41 73 96 210.0 70.0 17
30 应孔余 66 81 71 218.0 72.0 14
31 宋成取 71 68 62 201.0 67.0 22
32 黄益省 65 56 43 164.0 54.0 35
33 陈思文 55 100 44 199.0 66.0 24
34 上官福新 64 62 70 196.0 65.0 26
35 钟国横 49 69 56 174.0 58.0 33
36 林型涨 78 73 50 201.0 67.0 23
*/
*/