如果你是从命令行构建你的程序,那么你可以使用一种叫做“输入重定向”的东西。下面是它如何工作的:
让我们假设你的程序是:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ScanningMultiline
{
public static void main (String[] args)
{
List<String> lines = new ArrayList<>();
try (Scanner scanner = new Scanner (System.in))
{
while (scanner.hasNextLine())
{
lines.add (scanner.nextLine());
}
}
System.out.println ("Total lines: " + lines.size());
}
}
现在,假设输入文件中的准备程序。
要编译你的终端/命令提示符的当前目录切换到程序目录,然后写程序:
javac ScanningMultiline.java
然后运行,使用输入重定向,如:
java ScanningMultiline < InputFile.txt
如果您InputFile.txt
是在另一个目录,只是把它的完整路径,而不是像:
java ScanningMultiline < "/Users/Xyz/Desktop/InputFile.txt"
另一种方法
您可以尝试直接从文件读取输入内容。下面是如何编写该程序:
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ScanningMultiline
{
public static void main (String[] args)
{
final String inputFile = "/Users/Xyz/Desktop/InputFile.txt";
List<String> lines = new ArrayList<>();
try (Scanner scanner = new Scanner (Paths.get (inputFile)))
{
while (scanner.hasNextLine())
{
lines.add (scanner.nextLine());
}
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println ("Total lines: " + lines.size());
}
}
该方法直接从文件中读取,并将文件中的行放在String列表中。
另一种方法
您可以从文件中读取行,并将其存储在一个单行列表为好,如下面的代码片段演示:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class ScanningMultiline
{
public static void main (String[] args) throws IOException
{
final String inputFile = "/Users/Xyz/Desktop/InputFile.txt";
List<String> lines = Files.readAllLines (Paths.get (inputFile));
}
}
Yohanes Khosiawan已回答一个不同的方法,所以我不写在这里。
你的程序意图是正确的。您尝试提供多行输入的方式是错误的。尝试从文件中读取,写入:'Scanner scanner = new Scanner(Paths.get());'。另外''StringBuilder'用于追加'b'中的行,因为'String'是不可变的,所以如果你对它执行'+ =',它会产生性能命中。 –
2014-11-21 06:09:58
对不起。我不明白你的意思。 – 2014-11-21 06:43:49