IO问题!

wfqqwer5213 2007-12-18 06:37:32
有文件 A.TXT

内容格式如下

[a]
aaaaa
bbbbb
ccccc
[b]
ddddd
eeeee
fffff
[c]
ggggg
hhhhh
iiiiii

怎么用程序解析[b]到[c]之间的数据?
[a][b][c]都是文本文件里的标记,占一行!
...全文
142 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdjray 2007-12-20
  • 打赏
  • 举报
回复
楼主我上面的代码已经做过处理了,可以仔细看看
dushouxiao 2007-12-20
  • 打赏
  • 举报
回复
7楼的和2楼的是同一种方法,但2楼的写的规范多了,支持2楼的。
xuejianxinokok 2007-12-20
  • 打赏
  • 举报
回复
wfqqwer5213 2007-12-19
  • 打赏
  • 举报
回复
现在最主要的问题是要我先读后面的,再读前面的!!!不知道怎么读!
skychen1900 2007-12-18
  • 打赏
  • 举报
回复
楼上验证[A|B|c]的方法不是很严密,例如 [xjsk],....
可以用正则表达式判断



boolean isWord = Pattern.matcher("^\\[\\w\\]$", line); //String line; 读取的行

wfqqwer5213 2007-12-18
  • 打赏
  • 举报
回复
刚想了下,这样应该可以很好的实现!


BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream("c:\\1.txt"), "utf-16"));
String line = "";
while (!"[B]".equals(line)) {
line = reader.readLine();
}
while (!"[C]".equals(line = reader.readLine())) {
System.out.println(line);
}
zdjray 2007-12-18
  • 打赏
  • 举报
回复
//main里面得到的list是包含MyArrayList的ArrayList
//MyArrayList继承自ArrayList并且包含一个name,就是a,b,c之类
//代码中对开头和结尾都做了处理

ReadFile.java

package com.ray.tests.readtext;

import java.io.*;
import java.util.ArrayList;

public class ReadFile {
public static ArrayList<MyArrayList> readFile() throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(
"src/com/ray/tests/readtext/a.txt"));

ArrayList<MyArrayList> list = new ArrayList<MyArrayList>();

String inputLine;
MyArrayList myArrayList = new MyArrayList();
boolean firstTime = true;

while ((inputLine = bufferedReader.readLine()) != null) {
if(inputLine.startsWith("[")){
//first time
if (firstTime) {
firstTime = false;
}
else {
list.add(myArrayList);
myArrayList = new MyArrayList();
}

String name = inputLine.substring(1, inputLine.length() - 1);
myArrayList.setName(name);

continue;
}
myArrayList.add(inputLine);
}

//last time
list.add(myArrayList);

bufferedReader.close();

return list;
}

public static void main(String[] args) throws IOException {
ArrayList<MyArrayList> list = readFile();
for (MyArrayList myArrayList : list) {
System.out.println("[" + myArrayList.getName() + "]");
for (String content : myArrayList) {
System.out.println(content);
}
}
}
}


MyArrayList.java

package com.ray.tests.readtext;

import java.util.ArrayList;

public class MyArrayList extends ArrayList<String> {

private static final long serialVersionUID = 1L;
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public MyArrayList(){
name = "";
}

public MyArrayList(String name){
this.name = name;
}
}
kaiy_ai 2007-12-18
  • 打赏
  • 举报
回复
感觉是
正则表达式的蜘蛛程序。
一楼的好像是 自己没实现
mark
学习。
skychen1900 2007-12-18
  • 打赏
  • 举报
回复
[a][b][c]都是文本文件里的标记,占一行!
理解成空行了~~
skychen1900 2007-12-18
  • 打赏
  • 举报
回复

package edu.ytu.skychen;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class ReadFile {

/**
* @param args 文件名
*/
public static void main(String[] args) {
if (args.length != 1) { // 只能读一个文件
System.out.println("输入文件名");
return;
}
int i = 0; // 标记
try {
BufferedReader reader = new BufferedReader(new FileReader(new File(
name)));
StringBuilder sb = new StringBuilder(); // 保存需要的文本
String tmp; // 暂存
while ((tmp = reader.readLine()) != null) {
if (tmp.length() == 0) // 数标记的个数
i++;
if (i == 2) { // 第二个标记
sb.append(tmp + "\n");
}
}
System.out.println("文件内容: " + sb);
} catch (Exception e) {
e.printStackTrace();
}
}
}


基本的方法实现!
ltc_mouse 2007-12-18
  • 打赏
  • 举报
回复
如果文件比较大,不想一次性读取的话,我觉得可以试试readLine方法,逐行比较

final String file="A.txt";
fianl String bein="[b]";
final String end="[c]";
BufferedReader in = new BufferedReader(new FileReader(file));
String buf;
String result="";
while( null!=(buf=in.readLine()) && !buf.startsWith(begin) );
while( null!=(buf=in.readLine()) && !buf.startsWith(end) ) {
//这里有点问题,无法决定是恢复成"\n"还是"\r\n",而1楼的正则表达式则可保证不丢失这个信息
result = result+buf+"\n";
}
iskyshop 2007-12-18
  • 打赏
  • 举报
回复
正则表达式来获取他们之间的内容,然后你再处理提取的字符串就是了

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧