使用DrJava管道(将文本文件中的输入重定向)到Java程序中

时间:2013-03-17 20:53:08

标签: java 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

我做错了什么?

4 个答案:

答案 0 :(得分:1)

这真的是一种非常古老的工作方式。 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程序,该程序接受一个参数,该参数是文件的路径并读取它。之后,您只需从列表中打印字符串

答案 1 :(得分:1)

找到这个可能有助于解决方案的链接。

inputoutput-redirection-in-drjava

提取物:

  

DrJava中的交互窗格不是DOS命令行或Unix类型   shell,它不支持I / O重定向。

基于上述我想要的解决方案:

[assembly: ExportRendererAttribute(typeof(CustomPicker2), typeof(CustomPicker2Renderer))]

在Dr.Java上(如果Dr.Java支持主要论点):

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]);
   }
}

答案 2 :(得分:0)

这是我尝试重定向到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

这是在DOS命令行中在Windows中执行此操作的方法。

我很高兴知道如何在eclipse中完成这项工作

答案 3 :(得分:0)

要使用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() );
    }
  }
}

通过这种方式,您无法获得要求输入的框。