[英]Piping (redirecting input from a text file) into a Java program using DrJava
我正在将文本文件传送到Java程序中。 这就是文本文件“ input.txt”的内容:
4
5
即,分隔行中的数字4和5。 我希望程序读取这些数字并打印出来。 此代码应工作:
public class readFile {
public static void main(String[] args) {
while (!StdIn.isEmpty()) {
System.out.println( StdIn.readInt() );
}
}
}
但是当我在DrJava中执行以下操作时:
run readFile < input.txt
我不明白
4
5
但是我看到一个盒子,要求我输入而不是将数字打印出来: http : //oi50.tinypic.com/3585kxc.jpg
我究竟做错了什么?
这确实是一种非常古老的工作方式。 Java允许您从文件系统读取文件。 下面是一个简单的方法示例,该方法从文件系统读取文件并向您返回文件中所有字符串的列表(不检查不存在的文件,但可以自己添加):
进口:
import java.util.List;
import java.io.IOException;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
功能:
public List<String> readFile(String filePath) throws IOException {
List<String> result = new ArrayList<String>();
try {
FileInputStream streamer = new FileInputStream(filePath);
InputStreamReader streamReader = new InputStreamReader(streamer);
BufferedReader reader = new BufferedReader(streamReader);
String line;
while ((line = reader.readLine()) != null) {
result.add(line.replace("\n", ""));
}
}
catch(Exception e){
e.printStackTrace();
}
return result;
}
因此,您可以编写一个接受参数的Java程序,该参数是文件的路径,并且可以读取它。 之后,您只需从列表中打印字符串即可
找到了可能对解决方案有帮助的链接。
摘录:
DrJava中的“交互窗格”不是DOS命令行或Unix类型的外壳程序,它不支持I / O重定向。
基于上述,我针对您想要的解决方案是:
import java.io.*;
public class ReadFile {
public static void readFromStream(String is) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(is));
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
public static void main(String args[]) throws IOException {
readFromStream(args[0]);
}
}
在Dr.Java上(如果Dr.Java支持接受主要参数):
java Readfile Q1.txt
这是我尝试重定向到DrJava的文本文件:
Q1.txt
10
8 0
5 2
6 0
6 4
9 6
9 5
在Dos命令行中,我输入了:
C:\\Users\\USER\\algs4\\Week1>java QuickFindUF < Q1.txt
这导致以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: edu/princeton/cs/algs
4/StdIn
at QuickFindUF.main(QuickFindUF.java:172)
Caused by: java.lang.ClassNotFoundException: edu.princeton.cs.algs4.StdIn
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
在底部的DrJava“交互”对话框中键入相同的命令时,我得到相同的结果。
我尝试从命令行直接在命令行后键入管道:
10
8
0
...
^z
在DrJava中执行相同操作时似乎需要^ D(ctrl + D)
最终我有预感,使用java-algs4.bat可能是解决方案:
..\\bin\\java-algs4.bat QuickFindUF < Q1.txt
这是在Windows中从DOS命令行执行的方法。
我很乐意弄清楚日食是如何完成的
要将文本文件使用Dr Java通过管道传送到Java程序中,您需要使用edu.princeton.cs.algs4.In类从标准输入中读取文件。 您的代码必须如下所示:
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdOut;
public class readFile {
public static void main(String[] args) {
//Read file
In in = new In(args[0]);
while (!in.isEmpty()) {
StdOut.println( in.readInt() );
}
}
}
这样,您将不会收到要求您输入内容的框。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.