我想实现一个programm,它从用户输入中读取两个字符串。
try
{
System.out.println( "please enter a valid URL ( i.e. http://www.uibk.ac.at )" );
Scanner inputScanner = new Scanner( System.in );
String urlString = inputScanner.next();
asciiTable = new int[NUM_ASCII_CHAR];
URL url = new URL( urlString );
URLConnection connection = url.openConnection();
connection.connect();
InputStreamReader in = new InputStreamReader( url.openStream() );
countCharactersfromFile( in );
printAsciiTable( asciiTable );
printNumberOfChars( asciiTable );
inputScanner.close();
in.close();
}
// it has not the form of an URL
catch ( MalformedURLException e )
{
e.printStackTrace();
}
// If the site cannot be connected
catch( UnknownHostException e )
{
e.printStackTrace();
}
// some IO-Error occurs
catch ( IOException e )
{
e.printStackTrace();
}
// if the ASCII array is empty
catch( EmptyListException e )
{
e.printStackTrace();
}
catch( IllegalArgumentException e )
{
e.printStackTrace();
}
catch ( Exception e )
{
e.printStackTrace();
}
try
{
System.out.println( "Please enter the name of a file " );
asciiTable = new int[NUM_ASCII_CHAR];
Scanner scanner = new Scanner( System.in );
String fileString = scanner.next();
FileInputStream fileStream = new FileInputStream( fileString );
InputStreamReader in = new InputStreamReader( fileStream );
countCharactersfromFile( in );
printAsciiTable( asciiTable );
printNumberOfChars( asciiTable );
scanner.close();
}
catch ( IOException e )
{
e.printStackTrace();
}
catch( EmptyListException e )
{
e.printStackTrace();
}
catch( IllegalArgumentException e )
{
e.printStackTrace();
}
catch ( Exception e )
{
e.printStackTrace();
}
起初我想告诉你我知道这个问题。我应该只在我的程序中使用1个扫描仪。但是如果在我的程序中只使用一个 try block ,如果抛出异常,则不允许执行任务的第二部分。 我有一个解决方案,但我不知道它是否是一个好的。
try
{
Scanner inputScanner = new Scanner( System.in );
try
{
//the URL code, use inputScanner here
}
catch()
{
}
try
{
// The file code, use inputscanner here
}
catch()
{
}
inputscanner.close();
}
catch()
上面显示的是一个好的解决方案吗?或者你有一些更好的解决方案来解决我的问题。
由于 帕特里克
答案 0 :(得分:2)
要确保始终关闭Scanner
,请将使用它的所有代码包装到try
块中,然后在finally
块中将其关闭:
Scanner inputScanner = new Scanner(System.in);
try {
try {
// 1st operation
} catch (Exception e) {
System.err.println("1st operation failed");
}
try {
// 2nd operation
} catch (Exception e) {
System.err.println("2nd operation failed");
}
} finally {
inputScanner.close();
}
或者使用try-with-resource,它也会这样做:
try (Scanner inputScanner = new Scanner(System.in)) {
...
}
最好不要关闭inputScanner
。您将无法从标准输入中读取任何其他内容。扫描程序不会消耗任何额外的系统资源,因此您可以让垃圾收集器担心它。
附加提示:如果您没有对它们做任何有用的事情,请不要捕获异常。让它们传播。您甚至可以声明main
方法抛出Exception
。