Java 读取带分隔符的大文本文件
Java read large text file with separator
我正在尝试读取以下格式的大型文本文件:
datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+
我想在文本文件中读取这个字符串作为一个大 java 字符串。这可能吗?我知道split方法的用法
它可以逐行阅读它,但我真正需要的是在“+”号处拆分这个长文本字符串。之后我想将它存储为数组、arraylist、list、...
谁能帮我解决这个问题?因为互联网上的所有信息都只是逐行读取文件。
提前致谢!
String inpStr = "datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+";
String[] inpStrArr = inpStr.split("+");
希望这是你需要的。
在我看来你的问题是你不想逐行读取文件。因此,请尝试分段阅读(每次说 20 个字符并构建您的字符串):
char[] c = new char[20]; //best to save 20 as a final static somewhere
ArrayList<String> strings = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(filename));
while (br.read(c) == 20) {
String str = new String(c);
if (str.contains("+") {
String[] parts = str.split("\+");
sb.append(parts[0]);
strings.add(sb.toString());
//init new StringBuilder:
sb = new StringBuilder();
sb.add(parts[1]);
} else {
sb.append(str);
}
}
您可以使用 BufferedReader
或任何 IO-classes.suppose 读取文件,您在 testing.txt
文件中有该字符串,然后通过读取文件中的每一行,您可以按分隔符 (+
).并遍历数组并打印。
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("C:\testing.txt"));//file name with path
while ((sCurrentLine = br.readLine()) != null) {
String[] strArr = sCurrentLine.split("\+");
for(String str:strArr){
System.out.println(str);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
根据Java规范,你应该能够得到一个长度为Integer.MAX_VALUE的字符串(总是2147483647(231 - 1),数组的最大大小,其中字符串class 用于内部存储)或最大堆大小的一半(因为每个字符都是两个字节),以较小者为准
How many characters can a Java String have?
试试这个:
private static void readLongString(File file){
ArrayList<String> list = new ArrayList<String>();
StringBuilder builder = new StringBuilder();
int r;
try{
InputStream in = new FileInputStream(file);
Reader reader = new InputStreamReader(in);
while ((r = reader.read()) != -1) {
if(r=='+'){
list.add(builder.toString());
builder = new StringBuilder();
}
builder.append(r);
}
}catch (IOException ex){
ex.printStackTrace();
}
for(String a: list){
System.out.println(a);
}
}
这是一种方法,请注意您不能加载超过最大 int 大小(大约 1 GB)
FileReader fr=null;
try {
File f=new File("your_file_path");
fr=new FileReader(f);
char[] chars=new char[(int)f.length()];
fr.read(chars);
String s=new String(chars);
//parse your string here
} catch (Exception e) {
e.printStackTrace();
}finally {
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
}
}
}
我正在尝试读取以下格式的大型文本文件:
datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+
我想在文本文件中读取这个字符串作为一个大 java 字符串。这可能吗?我知道split方法的用法
它可以逐行阅读它,但我真正需要的是在“+”号处拆分这个长文本字符串。之后我想将它存储为数组、arraylist、list、...
谁能帮我解决这个问题?因为互联网上的所有信息都只是逐行读取文件。 提前致谢!
String inpStr = "datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+";
String[] inpStrArr = inpStr.split("+");
希望这是你需要的。
在我看来你的问题是你不想逐行读取文件。因此,请尝试分段阅读(每次说 20 个字符并构建您的字符串):
char[] c = new char[20]; //best to save 20 as a final static somewhere
ArrayList<String> strings = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(filename));
while (br.read(c) == 20) {
String str = new String(c);
if (str.contains("+") {
String[] parts = str.split("\+");
sb.append(parts[0]);
strings.add(sb.toString());
//init new StringBuilder:
sb = new StringBuilder();
sb.add(parts[1]);
} else {
sb.append(str);
}
}
您可以使用 BufferedReader
或任何 IO-classes.suppose 读取文件,您在 testing.txt
文件中有该字符串,然后通过读取文件中的每一行,您可以按分隔符 (+
).并遍历数组并打印。
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("C:\testing.txt"));//file name with path
while ((sCurrentLine = br.readLine()) != null) {
String[] strArr = sCurrentLine.split("\+");
for(String str:strArr){
System.out.println(str);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
根据Java规范,你应该能够得到一个长度为Integer.MAX_VALUE的字符串(总是2147483647(231 - 1),数组的最大大小,其中字符串class 用于内部存储)或最大堆大小的一半(因为每个字符都是两个字节),以较小者为准
How many characters can a Java String have?
试试这个:
private static void readLongString(File file){
ArrayList<String> list = new ArrayList<String>();
StringBuilder builder = new StringBuilder();
int r;
try{
InputStream in = new FileInputStream(file);
Reader reader = new InputStreamReader(in);
while ((r = reader.read()) != -1) {
if(r=='+'){
list.add(builder.toString());
builder = new StringBuilder();
}
builder.append(r);
}
}catch (IOException ex){
ex.printStackTrace();
}
for(String a: list){
System.out.println(a);
}
}
这是一种方法,请注意您不能加载超过最大 int 大小(大约 1 GB)
FileReader fr=null;
try {
File f=new File("your_file_path");
fr=new FileReader(f);
char[] chars=new char[(int)f.length()];
fr.read(chars);
String s=new String(chars);
//parse your string here
} catch (Exception e) {
e.printStackTrace();
}finally {
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
}
}
}