本文概述
- 资源尝试示例1
- 资源尝试示例:使用多个资源
- Try-with-resources示例:使用finally块
- 禁止的异常
你可以传递实现java.lang.AutoCloseable的任何对象, 其中包括实现java.io.Closeable的所有对象。
以下示例将字符串写入文件。它使用FileOutputStream的实例将数据写入文件。 FileOutputStream是一种资源, 程序完成后必须将其关闭。因此, 在此示例中, 资源关闭是由try本身完成的。
资源尝试示例1
import java.io.FileOutputStream;
public class TryWithResources {
public static void main(String args[]){
// Using try-with-resources
try(FileOutputStream fileOutputStream =newFileOutputStream("/java7-new-features/src/abc.txt")){
String msg = "Welcome to srcmini!";
byte byteArray[] = msg.getBytes();
//converting string into byte array
fileOutputStream.write(byteArray);
System.out.println("Message written to file successfuly!");
}catch(Exception exception){
System.out.println(exception);
}
}
}
输出:
Message written to file successfuly!
文件输出
Welcome to srcmini!
资源尝试示例:使用多个资源
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
public class TryWithResources {
public static void main(String args[]){
// Using try-with-resources
try( // Using multiple resources
FileOutputStream fileOutputStream =new FileOutputStream("/java7-new-features/src/abc.txt");
InputStream input = new FileInputStream("/java7-new-features/src/abc.txt")){
// -----------------------------Code to write data into file--------------------------------------------//
String msg = "Welcome to srcmini!";
byte byteArray[] = msg.getBytes();
// Converting string into byte array
fileOutputStream.write(byteArray);
// Writingdata into file
System.out.println("------------Data written into file--------------");
System.out.println(msg);
// -----------------------------Code to read data from file---------------------------------------------//
// Creating input stream instance
DataInputStream inst = new DataInputStream(input);
int data = http://www.srcmini.com/input.available();
// Returns an estimate of the number of bytes that can be read from this input stream.
byte[] byteArray2 = new byte[data];
//
inst.read(byteArray2);
String str = new String(byteArray2);
// passing byte array into String constructor
System.out.println("------------Data read from file--------------");
System.out.println(str);
// display file data
}catch(Exception exception){
System.out.println(exception);
}
}
}
输出:
------------Data written into file--------------
Welcome to srcmini!
------------Data read from file--------------
Welcome to srcmini!
你可以使用try-with-resources语句使用catch和finally块, 就像普通的try语句一样。
注–在try-with-resources语句中, catch或finally块在声明的资源关闭后执行。Try-with-resources示例:使用finally块
import java.io.FileOutputStream;
public class TryWithResources {
public static void main(String args[]){
try( FileOutputStream fileOutputStream=
new FileOutputStream("/home/irfan/scala-workspace/java7-new-features/src/abc.txt")){
// -----------------------------Code to write data into file--------------------------------------------//
String msg = "Welcome to srcmini!";
byte byteArray[] = msg.getBytes();
// Converting string into byte array
fileOutputStream.write(byteArray);
// Writingdata into file
System.out.println("Data written successfully!");
}catch(Exception exception){
System.out.println(exception);
}
finally{
System.out.println("Finally executes after closing of declared resources.");
}
}
}
输出:
Data written successfully!
Finally executes after closing of declared resources.
禁止的异常如果try块引发异常, 并且try-with-resources引发一个或多个异常, 则try-with-resources引发的异常将被抑制。换句话说, 可以说, 尝试资源引发的异常是被抑制的异常。
你可以使用Throwable类的getSuppress()方法获取这些异常。
【try-with-resources语句】Java在Throwable类中添加了一个新的构造函数和两个新方法来处理受抑制的异常。
建设者 | 描述 | |
---|---|---|
protected Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) | 它使用指定的详细消息, 原因, 启用或禁用抑制以及可写的堆栈跟踪启用或禁用来构造新的throwable。 |
方法 | 描述 | |
---|---|---|
公共最终无效addSuppressed(Throwable异常)/ td> | 它将指定的异常附加到为了传递此异常而被抑制的异常。此方法是线程安全的, 通常由try-with-resources语句(自动和隐式)调用。它引发以下异常:IllegalArgumentException:如果异常是可抛出的, 则throwable无法抑制自身。 NullPointerException:如果exception为null。 | |
public final Throwable[] getSuppressed() | 它返回一个数组, 其中包含被try-with-resources语句抑制的所有异常。如果没有抑制异常或禁用抑制, 则返回一个空数组。 |
推荐阅读
- Java通用实例创建的类型推断
- ?算法题?面试题每日精进|蓝桥杯java怎么提交代码
- 蓝桥杯Python|蓝桥杯VIP题目免费提交,内含超详解,步步截图!!!
- win8系统手势技巧如何关闭|win8系统关闭手势技巧详细步骤
- win8系统安装.net3.5出现出错0x800f0907的处理办法
- Win 8安装HAXM虚拟加速器后开机速度变慢的处理办法
- win8系统运用foxmail发邮件总提示“接收密码出错”怎样办
- Win 8系统安装itunes提示“此windows installer软件包有一个问题”怎样办
- win8系统运行程序提示“联机处理方案”窗口如何关闭