如何在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