我有一个包含数据的文本文件。该文件包含所有月份的信息。想象一下,1月份的信息占据了50行。比2月开始,它还占据了40多条线。比我有三月等...是否有可能只阅读部分文件?我可以说“从X行读到Y行”吗?或者有更好的方法来实现这一目标吗?我只想打印一个月的数据而不是所有文件。这是我的代码
public static void readFile()
{
try
{
DataInputStream inputStream =
new DataInputStream(new FileInputStream("SpreadsheetDatabase2013.txt"));
while(inputStream.available() != 0)
{
System.out.println("AVAILABLE: " + inputStream.available());
System.out.println(inputStream.readUTF());
System.out.println(inputStream.readInt());
for (int i = 0; i < 40; i++)
{
System.out.println(inputStream.readUTF());
System.out.println(inputStream.readUTF());
System.out.println(inputStream.readUTF());
System.out.println(inputStream.readUTF());
System.out.println(inputStream.readUTF());
System.out.println(inputStream.readDouble());
System.out.println(inputStream.readUTF());
System.out.println(inputStream.readBoolean());
System.out.println();
}
}// end while
inputStream.close();
}// end try
catch (Exception e)
{
System.out.println("An error has occurred.");
}//end catch
}//end method
感谢您的时间。
答案 0 :(得分:0)
我的方法是读取文本文件的全部内容并将其存储在ArrayList中,并只读取所请求月份的行。
示例:强>
使用此功能读取文件中的所有行。
/**
* Read from a file specified by the filePath.
*
* @param filePath
* The path of the file.
* @return List of lines in the file.
* @throws IOException
*/
public static ArrayList<String> readFromFile(String filePath)
throws IOException {
ArrayList<String> temp = new ArrayList<String>();
File file = new File(filePath);
if (file.exists()) {
BufferedReader brin;
brin = new BufferedReader(new FileReader(filePath));
String line = brin.readLine();
while (line != null) {
if (!line.equals(""))
temp.add(line);
line = brin.readLine();
}
brin.close();
}
return temp;
}
然后从ArrayList temp 中只读取您需要的那些。
示例:
如果您想读取2月份的数据,假设其50行数据并从第40行开始。
for(int i=40;i<90;i++)
{
System.out.println(temp.get(i));
}
注意:这只是一种方法。我不确定是否还有其他办法!
答案 1 :(得分:0)
如果您使用的是Java 7,则可以使用Files.readAllLines(Path path, Charset cs),例如
Path path = // Path to "SpreadsheetDatabase2013.txt"
Charset charset = // "UTF-8" or whatever charset is used
List<String> allLines = Files.readAllLines(path, charset);
List<String> relevantLines = allLines.subList(x, y);
x
(含)和y
(不包含)表示感兴趣的行号,请参阅List.subList(int fromIndex, int toIndex)。
此解决方案的一个好处,如readAllLines()
的JavaDoc中所述:
此方法可确保在读取所有字节或抛出I / O错误或其他运行时异常时关闭文件。
答案 2 :(得分:0)
根据您对数据的组织方式,我建议您做这样的事情
ArrayList<String> temp = new ArrayList<String>();
int read = 0;
File file = new File(filePath);
if (file.exists()) {
BufferedReader brin;
brin = new BufferedReader(new FileReader(filePath));
String line = brin.readLine();
while (line != null) {
if (!line.equals("")){
if(line.equals("March"))
read = 1;
else if(line.equals("April"))
break;
else if(read == 1)
temp.add(line);
}
line = brin.readLine();
}
brin.close();
我自己尝试过,它会接收3月到4月之间的所有数据。您可以根据需要调整它们或使它们成为变量。感谢ngoa的基础代码。信用到期的信用
答案 3 :(得分:0)
我会使用scanner class。
Scanner scanner = new Scanner(filename);
使用scanner.nextLine()
获取文件的每一行。如果您只需要从第x行到第y行,您可以使用for循环扫描您在通过扫描仪之前不需要的每条线路。小心不要在没有扔掉它的情况下击中异常。
或者您可以浏览扫描程序并为每行添加该行的String内容到ArrayList。祝你好运。