繁体   English   中英

使用DrJava管道连接(从文本文件重定向输入)到Java程序

[英]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

摘录:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM