我正试着解决我在编程中遇到的一个问题。
我们应该写代码从文件中读取并打印出来。我明白,我能做到。
他要我们做的是把它反着打印出来。
文件内容如下:
abc
123
987
他希望:
987
123
abc
该代码实际上如下所示:
{
FileReader n=new FileReader("F:\\Java\\Set 8\\output1.txt");
Scanner in=new Scanner(n);
int l;
while (in.hasNext())
{
l=in.nextInt();
System.out.println(l);
}
in.close();
}
}
是的,我正在使用java.io。*;和扫描仪。
做这件事最简单的方法是什么?
编辑编辑编辑
下面是改进后的代码,我尝试将其放入数组中。
数组中的数据未打印出来。
public static void main(String[] args) throws IOException
{
int[]Num=new int[20];
Scanner in=new Scanner(new FileReader("F:\\Java\\Set 8\\output1.txt"));
int k;
for (k=0;k<20;k++)
{
Num[k]=in.nextInt();
}
//in.close();
for (k=20;k<20;k--)
{
System.out.print(+Num[k]);
}
//in.close();
}
8条答案
按热度按时间vlurs2pr1#
最简单的方法是构造一个List,并在阅读文件时将每一行添加到列表中。完成后,反向打印列表项。
这是我的版本的代码为您的问题。
6qftjkof2#
使用堆栈。
zsohkypk3#
如果允许使用第三方API,Apache Commons IO包含一个类
ReversedLinesFileReader
,它读取类似于BufferedReader的文件(除了最后一行)。http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/ReversedLinesFileReader.html另一个(效率较低的)解决方案在注解中有所暗示,你可以将整个文件读入一个ArrayList,反转该列表(例如,通过将其内容推到堆栈上,然后将其弹出),然后遍历反转后的列表进行打印。
**编辑:**下面是一个粗略的示例:
使用
ArrayList
代替静态数组。我们不需要事先知道文件的长度,所以静态数组在这里没有意义。http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html您的示例输入
123
、abc
等包含字符和整数,因此您对hasNextInt
和nextInt
的调用最终将抛出异常。要读取行,请改用hasNextLine
和nextLine
。这些方法返回String
,因此我们的ArrayList还需要存储String。http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextLine()一旦文件在列表中(如果文件很大,这不是一个好的解决方案--我们已经将整个文件读入内存),我们可以反转列表(如果保持反转形式有意义的话),或者只是向后迭代。
umuewwlo4#
尝试使用org.apache.commons.io.input.reversedlinesfileReader,它应该可以做你想做的事情。
rsl1atfo5#
你可以像现在这样读取这些行,但是不要打印它们(因为这样会按顺序打印,而你需要相反的方式),而是将它们添加到一些内存结构中,比如List或Stack,然后在第二个循环中,迭代这个结构,按需要的顺序打印这些行。
webghufk6#
使用您的代码和注解中的答案,下面是一个示例,说明如何将字符串存储到数组列表中,然后反向打印它们(根据您自己的代码构建)
kninwzqo7#
使用Java 8:
gr8qqesn8#