1'~'Afghanistan#@#@#2'~'Albania#@#@#3'~'Algeria#@#@#5'~'Andorra#@#@#6'~'Angola#@#@#7'~'Anguilla#@#@#8'~'Antarctica#@#@#9'~'Antigua & Barbuda#@#@#10'~'Argentina#@#@#11'~'Armenia#@#@#12'~'Aruba#@#@#13'~'Australia#@#@#14'~'Austria#@#@#15'~'Azerbaijan#@#@#16'~'Bahamas#@#@#17'~'Bahrain#@#@#18'~'Bangladesh#@#@#19'~'Barbados#@#@#20'~'Belarus#@#@#21'~'Belgium#@#@#22'~'Belize#@#@#23'~'Benin#@#@#24'~'Bermuda#@#@#25'~'Bhutan#@#@#26'~'Bolivia#@#@#27'~'Bosnia-Herzegovina#@#@#28'~'Botswana#@#@#30'~'Brazil#@#@#31'~'Brunei#@#@#32'~'Bulgaria#@#@#33'~'Burkina Faso#@#@#34'~'Burundi#@#@#35'~'Cambodia#@#@#36'~'Cameroon#@#@#37'~'Canada#@#@#38'~'Cape Verde#@#@#39'~'Cayman Islands#@#@#40'~'Central African Republic#@#@#41'~'Chad#@#@#42'~'Chile#@#@#43'~'China#@#@#46'~'Colombia#@#@#47'~'Comoros#@#@#48'~'Republic of the Congo#@#@#49'~'Cook Islands#@#@#50'~'Costa Rica#@#@#51'~'Croatia#@#@#52'~'Cuba#@#@#53'~'Cyprus#@#@#54'~'Czech Republic#@#@#55'~'Den#@#@#56'~'Djibouti#@#@#57'~'Dominica#@#@#58'~'Dominican Republic#@#@#60'~'Ecuador#@#@#61'~'Egypt#@#@#62'~'El Salvador#@#@#63'~'Equatorial Guinea#@#@#就像以上一段字符串,我需要从文本中读取出来。然后存入数据库,分析格式是这样的,'~'为分隔不同字段的数据,#@#@#分隔为不同组。
问题是我用流去读取的时候比如说读取一行一行的,读取一行末尾不是以#@#@#结尾而是#@#之列的,就会把字段弄混了,出现bug。用指定大小的去读文件也是相同的问题。IO流困扰
问题是我用流去读取的时候比如说读取一行一行的,读取一行末尾不是以#@#@#结尾而是#@#之列的,就会把字段弄混了,出现bug。用指定大小的去读文件也是相同的问题。IO流困扰
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class FileRead { static FileReader fr=null;
static char[] ch=new char[8192];
static List list=new ArrayList<String[]>();
String[] s=new String[2];
public static void main(String[] args) {
read("D:\\javatest\\新建文本文档.txt");
print(list);
}
public static void read(String path){
int n=0;
try {
fr=new FileReader(new File(path));
try {
while(fr.read(ch, 0, ch.length)!=-1){
String st=new String(ch);
String sp[]=st.split("'~'");
for(String str:sp){
String sp1[]=str.split("#@#@#");
if(sp1.length==2){
list.add(sp1);
}
}
String st1=st.substring(st.length()-3);
if((n=st1.indexOf("'~'"))!=-1||(n=st1.indexOf('#'))!=-1){
ch=new char[n];
continue;
}
ch=new char[8192];
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void print(List<String[]> listStr){
for(String[] str:listStr){
System.out.println(str[0]+"\t"+str[1]);
}
}
}
楼主可以试试,如果能解决问题 请回复下
line = "";
while(){
line = line + readLine();
String[] str = line.split("#@#@#");
String tmp = str[str.length - 1];
if(tmp.endWith("#") || tmp.endWith("@")){
line = tmp;
处理str中下标从0到str.length - 2;
}else{
处理str中下标从0到str.length - 1;
}
}
2.还是一行一行的处理,但是在处理每行数据的时候注意
a)通过indexOf 和 substring来截取字符串,如果最后找不到分隔符了就把剩余的字符串缓存起来
b)上一行剩余的字符串加上这行新读取出来的字符串拼起来再做处理,如此类推就可以解决
文件很大的话还是按byte的方式读取吧,看了你的输入应该都是英文,直接读byte就可以.像协议处理那样.