读入和写入作为命令行参数传递的文件

时间:2017-11-03 16:26:01

标签: java command-line

我试图弄清楚如何将两个文件(input.txt和output.txt)作为参数传递给我的main方法,读取输入文件,将其传递给递归方法,然后编写变异字符串到输出文件。我之前从未使用过命令行参数,因此我不确定如何使其工作。这是迄今为止的代码:

public static void main(String[] args)  
{ 
    ArrayList<String> fileInput = new ArrayList<String>();//ArrayList to hold data from input file
    File file = new File(args[0]);
  try
  {

        Scanner scan = new Scanner(new File(args[0]));
        FileInputStream readFile = new FileInputStream("input.txt"); // readFile passed from args[0]; args[0] is the argument passed as a string that is held at the 0 index of the args array 
        fileInput.add(file); //red error line under Add
  }
  catch(IOException e)
  {
    e.printStackTrace();
    System.exit(0);
  }

  ArrayList<String> strArray = new ArrayList<String>(); 
  String s;

  for(int i = 0; i < file.length() ; i++) //int i = 0; length of stored string data object; i++)
  {
      //recursiveMarkUp is a string type
        strArray.add(file.recursiveMarkUp());//call the markup method and save to an array so we can print to the output file later 
        //line to print output to output.txt
  }

}

1 个答案:

答案 0 :(得分:0)

传入参数时,它们存储在args[]数组中,并且像main中的任何普通数组一样被访问。

File input = new File(args[0]);
File output = new File(args[1]); // make sure you check array bounds

您的评论指出红色错误行是因为您尝试将File对象添加到ArrayList<String>不相容的对象。但是,无论如何都不需要这样做。

您可以使用上面的文件构建输出流:

output.createNewFile(); // create the file so that it exists before writing output
FileOutputStream outStream = new FileOutputStream(output);
OutputStreamWriter outWriter = new OutputStreamWriter(outStream);

如果您正在使用Java 8+,使用Files.lines(),您可以将该文件的每一行作为String的流

进行处理
Files.lines(input.toPath())
    .map(line -> recursiveMarkup(line))
    .forEach(markedUp -> outWriter.write(markedUp));

在没有溪流的情况下这样做:

BufferedReader reader = new BufferedReader(new FileReader(input));
String line = "";
while(line != null) {
    line = recursiveMarkup(reader.readLine());
    outWriter.write(line);
}

我为了简洁而排除了try / catch块。我还假设你确实想要一次一行地处理输入文件;如果情况并非如此,请根据需要进行调整。您还应该考虑在读/写数据时明确定义文件编码(UTF-8等),尽管在这里我还是为了简洁而将其遗漏。