「java在文件中读取数组」java在文件中读取数组数据

博主:adminadmin 2022-11-26 22:58:07 81

今天给各位分享java在文件中读取数组的知识,其中也会对java在文件中读取数组数据进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java关于文件读取和数组问题

从文件格式来看,数据是以空格作为列间隔,以换行作为行间隔。

所以,

在读取数据的时候,第一行忽略,然后按照。

姓名                 年龄       国家             日期              项目       金 银 铜  总数  这个顺序去读取字符。

并且转义成你要的数据结构。

读完全部行后,你就有了一个list,或者数组。

最后就是统计了。

可以参考:

package zhidao;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.StringTokenizer;

public class ReadFile {

/**

 * main方法

 * 

 * @param args

 * @throws IOException

 */

public static void main(String args[]) {

File file = new File("src/zhidao/olympics.txt");

BufferedReader reader = null;

try {

reader = readFile(file);

} catch (IOException e) {

e.printStackTrace();

System.out.println("无法读取文件,可能文件不存在");

return;

}

ListRecord records = new ArrayListRecord();

try {

/**

 * 这里过滤第一条(行)记录

 */

String str = reader.readLine();

str = reader.readLine();

for (; str != null; str = reader.readLine()) {

// System.out.println(str);

Record record = wrapData(str);

if (record == null) {

continue;

} else {

records.add(record);

}

}

} catch (IOException e) {

e.printStackTrace();

System.out.println("读取文件的过程中发生了错误");

return;

} finally {

if (reader != null) {

try {

reader.close();

} catch (IOException e) {

e.printStackTrace();

System.out.println("文件无法关闭!");

return;

}

}

}

// System.out.println(records.size());

if (records == null || records.size() == 0) {

System.out.println("没有任何记录");

return;

}

MapString, Integer map = countMedals(records);

IteratorString iterator = map.keySet().iterator();

while (iterator.hasNext()) {

String key = (String) iterator.next();

System.out.println(key + ":" + map.get(key));

}

}

/**

 * 统计每个国家获得的奖牌数量

 * 

 * @param records

 * @return

 */

public static MapString, Integer countMedals(ListRecord records) {

MapString, Integer map = new HashMapString, Integer();

for (int i = 0; i  records.size(); i++) {

Record record = records.get(i);

Integer old = map.get(record.getCountry());

if (old != null) {

map.put(record.getCountry(), old + record.getTotle());

} else {

map.put(record.getCountry(), record.getTotle());

}

}

return map;

}

/**

 * 将一条记录(String)转换成一个记录(Record)

 * 

 * @param str

 * @return

 */

public static Record wrapData(String str) {

if (str == null) {

return null;

}

Record record = null;

/**

 * 这里我只是用空格做分隔符,你也可以重写这段代码,使得tab或其它不可见字符也可以做分隔符。

 */

StringTokenizer st = new StringTokenizer(str, " ");

// System.out.println(st.countTokens());

if (st.countTokens() == 10) {

record = new Record((String) (st.nextElement()),

(String) (st.nextElement()), (String) (st.nextElement()),

(String) (st.nextElement()), (String) (st.nextElement()),

(String) (st.nextElement()), (String) (st.nextElement()),

(String) (st.nextElement()), (String) (st.nextElement()),

(String) (st.nextElement()));

return record;

}

return null;

}

/**

 * 读文件

 * 

 * @param file

 * @return

 * @throws IOException

 */

public static BufferedReader readFile(File file) throws IOException {

BufferedReader reader = null;

FileInputStream fileInputStream = null;

InputStreamReader inputStreamReader = null;

try {

fileInputStream = new FileInputStream(file);

inputStreamReader = new InputStreamReader(fileInputStream);

reader = new BufferedReader(inputStreamReader);

return reader;

} catch (FileNotFoundException e) {

e.printStackTrace();

// if (fileInputStream != null) {

// fileInputStream.close();

// }

// if (fileInputStream != null) {

// fileInputStream.close();

// }

// if (reader != null) {

// reader.close();

// }

throw e;

}

}

}

/**

 * 获奖记录的数据结构

 * 

 * @author Administrator

 * 

 */

class Record {

private String name;

private int age;

private String country;

/*

 * 关于日期,这里就直接使用String了,如果你有需要,可以自己转义一下。比如使用SimpleDateFormat("yyyy/MM/dd")或(

 * "yyyy")等等

 */

private String year;

private String date;

private String sport;

private int gold;

private int silver;

private int copper;

private int totle;

public Record(String name, String age, String country, String year,

String date, String sport, String gold, String silver,

String copper, String totle) {

this.name = name;

this.age = Integer.valueOf(age);

this.country = country;

this.year = year;

this.date = date;

this.sport = sport;

this.gold = Integer.valueOf(gold);

this.silver = Integer.valueOf(silver);

this.copper = Integer.valueOf(copper);

this.setTotle(Integer.valueOf(totle));

}

public Record() {

}

public Record(String name, int age, String country, String year,

String date, String sport, int gold, int silver, int copper,

int totle) {

super();

this.name = name;

this.age = age;

this.country = country;

this.year = year;

this.date = date;

this.sport = sport;

this.gold = gold;

this.silver = silver;

this.copper = copper;

this.setTotle(totle);

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getCountry() {

return country;

}

public void setCountry(String country) {

this.country = country;

}

public String getDate() {

return date;

}

public void setDate(String date) {

this.date = date;

}

public String getSport() {

return sport;

}

public void setSport(String sport) {

this.sport = sport;

}

public int getGold() {

return gold;

}

public void setGold(int gold) {

this.gold = gold;

}

public int getSilver() {

return silver;

}

public void setSilver(int silver) {

this.silver = silver;

}

public int getCopper() {

return copper;

}

public void setCopper(int copper) {

this.copper = copper;

}

public int getTotle() {

return totle;

}

public void setTotle(int totle) {

this.totle = totle;

}

public String getYear() {

return year;

}

public void setYear(String year) {

this.year = year;

}

}

文件:因为读文件对格式的要求很高,所以这里将中间空白部分全部替换成了空格,你也可以在代码中做判断,如果是tab或者其它空白字符也可以做分隔符。

姓名 年龄 国家 年 日期 项目 金 银 铜 总数

RohullahNikpai 25 Afghanistan 2012 8/12/2012 Taekwondo 0 0 1 1

RohullahNikpai 21 Afghanistan 2008 8/24/2008 Taekwondo 0 0 1 1

AmarBenikhlef 26 Algeria 2008 8/24/2008 Judo 0 1 0 1

SorayaHaddad 23 Algeria 2008 8/24/2008 Judo 0 0 1 1

MohamedAllalou 26 Algeria 2000 10/1/2000 Boxing 0 0 1 1

TaoufikMakhloufi 24 Algeria 2012 8/12/2012 Athletics 1 0 0 1

结果:

Afghanistan:2

Algeria:4

想起以前在学校的时候做过C语言版本的类似东西,这里我就帮你写一个Java版本的吧。采用了面向对象的设计,很多代码已经抽取出来了。

没怎么做过测试。代码的健壮性你自己慢慢搞吧。关键是文件的格式一定不能错。当然你也可以在代码中对文件格式增加包容。

Java从文件中读取数据存入一个数组中

// 直接给一个只读一行的吧,呵呵,数字之间以空格来分隔public static void main(String[] args) throws Exception {File file = new File("src/test.txt");double[] a = getLineFromTxt(file," ");for(int i = 0; i a.length; i++){System.out.println("a["+i+"] = "+a[i]);}} test中的数据以空格隔开 12 32 32.02 public static double[] getLineFromTxt(File file, String split) throws Exception{BufferedReader br = new BufferedReader(new FileReader(file));String firstLine = br.readLine(); //就读第一行哦String[] arrs = firstLine.split(" ");//将字符数组转为double数组double[] arr = new double[arrs.length];for(int i = 0; i arr.length; i++){arr[i] = Double.parseDouble(arrs[i]);}if(br!= null){br.close();br = null;}return arr;}

用java从文件中读取二维数组

纠正下,文件中是没有二维数组的概念的,也就是说必须将文件中的内容转换为二维数组中的内容。

可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。

BufferedReader bre = null;

try {

String file = "D:/test/test.txt";

bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流

while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环

{

System.out.println(str);//此处将读取到的内容根据需要的规则,写入到二维数组中即可

};

备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。

Java读取TXT文件数据到数组

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

import java.io.BufferedReader;

import java.io.FileReader;

import java.util.Arrays;

public class FileToAry {

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new FileReader("c:\\test.txt"));//使用BufferedReader 最大好处是可以按行读取,每次读取一行

int n = 0;//定义n

int m = 0;//定义m

int[] U = null;//定义数组

int[] S = null;//定义数组

int index = 0;//索引

String temp;//定义字符串,用于保存每行读取到的数据

while ((temp = br.readLine()) != null) {

int[] ary = aryChange(temp);//通过函数吧字符串数组解析成整数数组

if (index == 0) {

n = ary[0];

m = ary[1];

}

if (index == 1) {

U = ary;

}

if (index == 2) {

S = ary;

}

index++;

}

br.close();// 关闭输入流

// 测试输出

System.out.println("n=" + n + "\tm=" + m + "\n数组U=" + Arrays.toString(U) + "\n数组S=" + Arrays.toString(S));

}

static int[] aryChange(String temp) {// 字符串数组解析成int数组

String[] ss = temp.trim().split("\\s+");// .trim()可以去掉首尾多余的空格

// .split("\\s+")

// 表示用正则表达式去匹配切割,\\s+表示匹配一个或者以上的空白符

int[] ary = new int[ss.length];

for (int i = 0; i ary.length; i++) {

ary[i] = Integer.parseInt(ss[i]);// 解析数组的每一个元素

}

return ary;// 返回一个int数组

}

java从文件中读数组

从流里面读出文件包含的长字符串,然后处理这个字符串,用split() 拆分成数组

java在文件中读取数组的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java在文件中读取数组数据、java在文件中读取数组的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。