2013-03-17 45 views
1

我將一個文本文件輸入到一個java程序中。這是文本文件「input.txt中」認爲:使用DrJava將輸入從文本文件重定向到Java程序

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

我在做什麼錯了?

+1

什麼是'StdIn'?我不使用DrJava,我從來沒有見過這個對象。 – Makoto 2013-03-17 20:57:15

+0

我認爲StdIn是Sedgewick等人使用的同名類。 Java課程。 – 2013-03-17 20:58:30

+0

是的,它由普林斯頓創建,請參見:http://introcs.cs.princeton.edu/java/stdlib/javadoc/StdIn.html – helgso 2013-03-17 21:06:50

回答

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「Interactions」對話框中輸入相同的命令時,我得到了相同的結果。

我試圖管道命令行命令行後直接輸入:

10 
8 
0 
... 
^z 

看來,你需要^ d(CTRL + d)在DrJava

做同樣的當我終於有預感在使用Java的algs4.bat可能是解決辦法:

..\bin\java-algs4.bat QuickFindUF < Q1.txt

這是如何從DOS命令行做到這一點在Windows中。

我會很高興弄清楚這是如何在Eclipse中要做的事

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程序,需要一個參數是你文件的路徑並讀取它。之後,您只需從列表中打印您的字符串

+0

您可以修改縮進以使答案更具可讀性嗎?謝謝! – 2016-02-02 19:23:45

+1

好的,完成了....... – 2016-02-02 19:41:55

+0

建議的解決方案沒有在DrJava中編譯。我做了一些改變。我希望你不要介意:) – 2016-02-02 19:52:25

1

找到此鏈接可能有助於解決方案。

inputoutput-redirection-in-drjava

提取物:

The Interactions Pane in DrJava is not a DOS command line or Unix-type shell, and it does not support I/O redirection.

基於以上我對你想要的解決方案是:

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 
+0

您應該添加'br.close();'以避免在資源泄漏時發出警告 – 2016-02-03 14:18:33

+1

將錯過的'br.close();'添加爲@YonatanSimson建議的 – kabir 2016-02-04 04:22:09

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

這樣,你將不會得到要求輸入的框。

相關問題