从文本文件中读取数据并过滤内容
read data from text file and filter content
我有一个包含一些证券市场数据的文本文件我想阅读文件的内容到现在为止我能够阅读全部内容但我需要的是阅读特定的行而不是全部内容我想要存储该特定行数据以存储在变量中我该如何实现?
从中读取数据我有这段代码。
public void loadPartsDataCleanly() throws FileNotFoundException
{
Part compart=new Part();
String line=" ";
File partsfile=new File("C:/Users/ATOMPHOTON/workspace/anup/parts.txt");//put your file location path
Scanner partscan=new Scanner(partsfile);
try {
while (partscan.hasNextLine()){
String mystr=partscan.nextLine();
System.out.println(mystr);
}
partscan.close();
}
catch (Exception e)
{
e.printStackTrace();
// TODO: handle exception
}
}
}
您可以更改您的角色:
while (partscan.hasNextLine()){
String mystr=partscan.nextLine();
System.out.println(mystr);
}
partscan.close();
至
int lineNo = 0;
List<String> theOnesICareAbout = new LinkedList<String>();
while (partscan.hasNextLine()){
String line=partscan.nextLine();
if (isOneOfTheImportantLines(lineNo)) {
theOnesICareAbout.add(line);
}
}
partscan.close();
在某个地方您需要一个函数来告诉您给定的行号是否是您关心的行号:
boolean isOneOfTheImportantLines(int lineNo) {
//YOUR LOGIC HERE
}
您可以添加额外的优化,例如不读取所有文件,但在您拥有所有您关心的信息后停止等。首先让它发挥作用。如果它不起作用,它不起作用的速度有多快都没关系:)
这是一种更简洁的 java8 处理方式(从 IO 和字符串查找的角度来看)
public class App {
public static void main(String args[]) {
Path path = Paths.get("C:\full\Path\to\file.txt");
List<String> stringList = getLinesThatContain(path, "IBM");
System.out.println(stringList);
}
// Note: No null-checking mechanisms
public static List<String> getLinesThatContain(Path path, String match) {
List<String> filteredList = null;
try(Stream<String> stream = Files.lines(path)){
// Filtering logic here
filteredList = stream.filter(line -> line.contains(match))
.collect(Collectors.toList());
} catch (IOException ioe) {
// exception handling here
}
return filteredList;
}
}
我有一个包含一些证券市场数据的文本文件我想阅读文件的内容到现在为止我能够阅读全部内容但我需要的是阅读特定的行而不是全部内容我想要存储该特定行数据以存储在变量中我该如何实现?
从中读取数据我有这段代码。
public void loadPartsDataCleanly() throws FileNotFoundException
{
Part compart=new Part();
String line=" ";
File partsfile=new File("C:/Users/ATOMPHOTON/workspace/anup/parts.txt");//put your file location path
Scanner partscan=new Scanner(partsfile);
try {
while (partscan.hasNextLine()){
String mystr=partscan.nextLine();
System.out.println(mystr);
}
partscan.close();
}
catch (Exception e)
{
e.printStackTrace();
// TODO: handle exception
}
}
}
您可以更改您的角色:
while (partscan.hasNextLine()){
String mystr=partscan.nextLine();
System.out.println(mystr);
}
partscan.close();
至
int lineNo = 0;
List<String> theOnesICareAbout = new LinkedList<String>();
while (partscan.hasNextLine()){
String line=partscan.nextLine();
if (isOneOfTheImportantLines(lineNo)) {
theOnesICareAbout.add(line);
}
}
partscan.close();
在某个地方您需要一个函数来告诉您给定的行号是否是您关心的行号:
boolean isOneOfTheImportantLines(int lineNo) {
//YOUR LOGIC HERE
}
您可以添加额外的优化,例如不读取所有文件,但在您拥有所有您关心的信息后停止等。首先让它发挥作用。如果它不起作用,它不起作用的速度有多快都没关系:)
这是一种更简洁的 java8 处理方式(从 IO 和字符串查找的角度来看)
public class App {
public static void main(String args[]) {
Path path = Paths.get("C:\full\Path\to\file.txt");
List<String> stringList = getLinesThatContain(path, "IBM");
System.out.println(stringList);
}
// Note: No null-checking mechanisms
public static List<String> getLinesThatContain(Path path, String match) {
List<String> filteredList = null;
try(Stream<String> stream = Files.lines(path)){
// Filtering logic here
filteredList = stream.filter(line -> line.contains(match))
.collect(Collectors.toList());
} catch (IOException ioe) {
// exception handling here
}
return filteredList;
}
}