我试图弄清楚如何将两个文件(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
}
}
答案 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等),尽管在这里我还是为了简洁而将其遗漏。