1

我正在将一个文本文件传送到一个 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

4 回答 4

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 程序,该程序接受一个作为文件路径的参数并读取它。之后,您可以从列表中打印您的字符串

于 2016-02-02T19:18:07.933 回答
1

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

drjava 中的输入输出重定向

提取物:

DrJava 中的交互窗格不是 DOS 命令行或 Unix 类型的 shell,它不支持 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
于 2016-02-03T07:23:56.123 回答
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

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

我很高兴知道这也是如何在 Eclipse 中完成的

于 2016-02-02T19:04:45.413 回答
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() );
    }
  }
}

这样,您将不会收到要求您输入的框。

于 2017-06-05T23:24:08.813 回答