【问题标题】:how to redirect stdin and stdout to a text file in java如何将标准输入和标准输出重定向到java中的文本文件
【发布时间】:2015-03-26 09:46:39
【问题描述】:

如何重定向标准输入和标准输出以将数据作为文本文件的输入并将数据作为输出传递到另一个文本文件。

我的输入和输出文件如下所示。

输入文件.txt

1 2 3

输出应该是输入文件中数字的总和。

输出文件.txt

6

【问题讨论】:

  • 您尝试过什么?您是否尝试过读取文件、解析文件等?如果是,你能提供你的代码 sn-ps 吗?
  • 如果这是某种家庭作业或作业,请相应地标记问题,以便获得适当的答案。

标签: java


【解决方案1】:

您可以将System.outSystem.in 设置为文件路径。那么你现有的代码应该可以工作了

System.setIn(new FileInputStream(new File("input.txt")));
...
//read from file
.... 

System.setOut(new PrintStream(new File("filename.txt")));
System.out.println(sum); // will be printed to the file    

【讨论】:

    【解决方案2】:

    您不必在 Java 中执行此操作,您可以在运行 Java 应用程序的 shell 中执行此操作:

    # cat input.txt | java -jar myapp.jar > output.txt
    

    Java 代码然后可以从 System.in 读取并写入 System.out。

    【讨论】:

    • 我如何获得一个 File 对象然后从标准输入中获取一个文件名?例如。 File newFile = new File(???) 当我有 java compiled < afile.txt?
    • 那里不会有文件。 afile.txt 的内容将通过管道传输到 System.in,您可以从中读取。
    【解决方案3】:

    这是一个基于反射的解决方案,包含来自@sidgate 答案的部分代码:

    import java.lang.reflect.Method;
    
    public class Driver {
    
        public static void main(String[] args) throws Exception {
    
            runSolution("utopiantree");
        }
    
        private static void runSolution(String packageName) throws Exception{
    
            System.setIn(Driver.class.getClassLoader().getResourceAsStream(packageName + ".tc"));
            Method mainMethod = Class.forName(packageName + ".Solution").getMethod("main", new Class[]{String[].class});
            mainMethod.setAccessible(true);
            mainMethod.invoke(null, new Object[]{new String[0]});
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多