Java字节流输出流FileOutputStream以及流异常处理

官网API:

https://docs.oracle.com/javase/8/docs/api/org/omg/CORBA/portable/OutputStream.html

	/**
	 * OutputStream:输出流,从程序写入到硬盘,抽象方法
	 * 	write(int b) 写入一个字节
	 * 	write(byte[] b) 写入字节数组 
	 * 	write(byte[] b,int,int),写入字节数组,int,开始位置,int,一共写多少个
	 * 	fulsh();强制将流数据写入文件,在流没有被关闭之前可以写入数据,数据量大的时候可以使用
	 * 	close();关闭流,如果不关闭流则无法对文件进行任何操作,就是会被系统一直占用着
	 * 	
	 * 实现类:FileOutputStream,所有的流名称命名都是根据做什么来命名的
	 * 常用构造
	 * FileOutputStream("D:\\a.txt");
	 * FileOutputStream(File file);
	 * FileOutputStream("D:\\a.txt",true);true:是否追加写入该路径下文件
	 * FileOutputStream(File file,true);true:是否追加写入该路径下文件
	 */
	public static void main(String[] args) throws IOException {
		//writeFile();
		//keepWriteFile();
		getException();
	}
	/**
	 * 流的异常信息
	 * 	一般流异常都需要捕获来处理,直接抛异常停止程序,因为如果写入失败或者关闭失败是不可控的,U盘被拔出怎么处理....
	 */
	private static void getException() {
		FileOutputStream fos = null;//提升变量作用域
		try {
			//如果程序发生异常没有写入成功那么,会直接走catch,那么如果close()写在try中则不会被关闭,使用finally不管是否发生异常都会被关闭
			fos = new FileOutputStream("D:\\a.txt");
			fos.write("Hello".getBytes());
		} catch (IOException e) {
			throw new RuntimeException("文本写入失败! 异常信息:\n"+e.getMessage());
		}finally{
			try {
				if(fos != null)//如果对象创建失败则不需要关闭
					fos.close();
			} catch (IOException e) {
				throw new RuntimeException("资源释放失败! 异常信息:\n"+e.getMessage());
			}
		}
	}
	/**
	 * 文本续写和换行
	 * 续写使用FileOutputStream(File file,true)或者FileOutputStream("D:\\a.txt",true);都可以
	 * 换行使用\r\n
	 */
	private static void keepWriteFile() throws IOException {
		File file = new File("D:\\a.txt");
		FileOutputStream fos = new FileOutputStream(file,true);//续写就需要将此构造参数二改为true,默认为false
		fos.write("Hello".getBytes());
		fos.write("\r\nWorld".getBytes());
		fos.close();
		System.out.println("写入完成");
	}


	/**
	 * 文本写入
	 */
	private static void writeFile() throws IOException {
		// 文件有可能找不到,所以有异常需要被处理,如果文件不存在则创建,如果存在则覆盖然后写入
		FileOutputStream fos = new FileOutputStream("D:\\a.txt");
		// 写入字节
		// fos.write(100);//记事本就是d,因为在打开记事本是会去根据ASCLL码表解析文件
		// 如果想写100则需要使用ASCLL码表进行写入
		/*
		 * fos.write(49); fos.write(48); fos.write(48);
		 */
		// 写入byte数组
		byte[] b = { 65, 66, 67, 68, };
		// fos.write(b);
		// fos.write(b,1,2);

		// 写入字符串
		fos.write("Hello".getBytes());

		fos.close();
		System.out.println("写入完成");
	}

你可能感兴趣的:(JavaSE,JavaSE,Java字节流,OutputStream,流异常处理)