如何在Java中读取定界文件
时间:2020-01-09 10:35:30 来源:igfitidea点击:
如果我们必须使用Java读取定界文件并进行解析,则可以使用以下两种方法进行操作:
1使用带有useDelimiter()方法的Scanner类。
2使用BufferedReader逐行读取文件,然后使用split()方法拆分每一行。
使用Scanner类读取Java中的分隔文件
扫描程序使用定界符模式将其输入分为令牌,默认情况下,该模式与空格匹配。扫描程序还可以使用除空格以外的分隔符,因为使用了useDelimiter()方法。我们来看一些使用Scanner类读取Java中带分隔符的文件的示例。
在Java中使用扫描仪读取CSV文件
这是一个示例CSV文件,表示帐户发件人,帐户至和转帐金额。
1001,1003,2000
1006,2004,3000
1005,1007,10000
我们要使用Scanner类阅读并解析它以显示字段。
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class ReadDelimited {
public static void main(String[] args) {
Scanner sc = null;
try {
sc = new Scanner(new File("D:\acct.csv"));
// Check if there is another line of input
while(sc.hasNextLine()){
String str = sc.nextLine();
// parse each line using delimiter
parseData(str);
}
} catch (IOException exp) {
// TODO Auto-generated catch block
exp.printStackTrace();
}finally{
if(sc != null)
sc.close();
}
}
private static void parseData(String str){
String acctFrom, acctTo, amount;
Scanner lineScanner = new Scanner(str);
lineScanner.useDelimiter(",");
while(lineScanner.hasNext()){
acctFrom = lineScanner.next();
acctTo = lineScanner.next();
amount = lineScanner.next();
System.out.println("Account From- " + acctFrom + " Account To- " + acctTo +
" Amount- " + amount);
}
lineScanner.close();
}
}
输出:
Account From- 1001 Account To- 1003 Amount- 2000 Account From- 1006 Account To- 2004 Amount- 3000 Account From- 1005 Account To- 1007 Amount- 10000
使用扫描仪读取Java中用竖线(|)分隔的文件
这是另一个示例Java程序,显示了如何使用Java中的Scanner读取管道定界数据。
1001 | 1003 | 2000
1006 | 2004 | 3000
1005 | 1007 | 10000
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class ReadDelimited {
public static void main(String[] args) {
Scanner sc = null;
try {
sc = new Scanner( new File("D:\test.txt"));
// Check if there is another line of input
while(sc.hasNextLine()){
String str = sc.nextLine();
// parse each line using delimiter
parseData(str);
}
} catch (IOException exp) {
// TODO Auto-generated catch block
exp.printStackTrace();
}finally{
if(sc != null)
sc.close();
}
}
private static void parseData(String str){
String acctFrom, acctTo, amount;
Scanner lineScanner = new Scanner(str);
lineScanner.useDelimiter("\|");
while(lineScanner.hasNext()){
acctFrom = lineScanner.next();
acctTo = lineScanner.next();
amount = lineScanner.next();
System.out.println("Account From- " + acctFrom + " Account To- " + acctTo +
" Amount- " + amount);
}
lineScanner.close();
}
}
输出:
Account From- 1001 Account To- 1003 Amount- 2000 Account From- 1006 Account To- 2004 Amount- 3000 Account From- 1005 Account To- 1007 Amount- 10000
由于管道符号是保留字符,因此我们需要对其进行转义,这就是为什么lineScanner.useDelimiter(" \ |");用来。
使用split()方法分割定界数据
在Java中读取分隔文件的另一种方法是逐行读取文件,可以使用BufferedReader读取文件,然后使用split方法分割定界数据。如果我们使用与上面相同的管道分隔文件,则Java示例如下。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadDelimited {
public static void main(String[] args) {
BufferedReader br = null;
try{
String strLine;
//FileReader instance wrapped in a BufferedReader
br = new BufferedReader(new FileReader("D:\test.txt"));
while((strLine = br.readLine()) != null){
parseData(strLine);
}
}catch(IOException exp){
System.out.println("Error while reading file " + exp.getMessage());
}finally {
try {
// Close the stream
if(br != null){
br.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static void parseData(String str){
String acctFrom, acctTo, amount;
// parsing using split method
String[] data = str.split("\|");
System.out.println("Account From- " + data[0] + " Account To- " + data[1] +
" Amount- " + data[2]);
}
}
输出:
Account From- 1001 Account To- 1003 Amount- 2000 Account From- 1006 Account To- 2004 Amount- 3000 Account From- 1005 Account To- 1007 Amount- 10000

