封装拷贝、封装释放
package cn.dym;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 1.封装拷贝
* 2.封装释放
* @author Administrator
*
*/
public class FileUtils {
public static void main(String[] args) {
//文件到文件
try {
InputStream is = new FileInputStream("abc.txt");
OutputStream os = new FileOutputStream("abc-copy.txt");
copy(is,os);
} catch (IOException e) {
e.printStackTrace();
}
//文件到字节数组
byte[] datas = null;
try {
InputStream is = new FileInputStream("p.png");
ByteArrayOutputStream os = new ByteArrayOutputStream();
copy(is,os);
datas = os.toByteArray();
System.out.println(datas.length);
} catch (IOException e) {
e.printStackTrace();
}
//字节数组到文件
try {
InputStream is = new ByteArrayInputStream(datas);
OutputStream os = new FileOutputStream("p-copy.png");
copy(is,os);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 对接输入输出流
* @param is
* @param os
*/
public static void copy(InputStream is,OutputStream os) {
try {
//3、操作 (分段读取)
byte[] flush = new byte[1024]; //缓冲容器
int len = -1; //接收长度
while((len=is.read(flush))!=-1) {
os.write(flush,0,len); //分段写出
}
os.flush();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
//4、释放资源 分别关闭 先打开的后关闭
close(is,os);
}
}
// /**
// * 释放资源
// * @param is
// * @param os
// */
// public static void close(InputStream is ,OutputStream os) {
// try {
// if (null != os) {
// os.close();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
//
// try {
// if(null!=is) {
// is.close();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
/**
* 释放资源
* @param ios
*/
public static void close(Closeable... ios) {
for(Closeable io:ios) {
try {
if(null!=io) {
io.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
try ...with...resource
package cn.dym;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* try ...with...resource
*
*/
public class FileUtils2 {
public static void main(String[] args) {
//文件到文件
try {
InputStream is = new FileInputStream("abc.txt");
OutputStream os = new FileOutputStream("abc-copy.txt");
copy(is,os);
} catch (IOException e) {
e.printStackTrace();
}
//文件到字节数组
byte[] datas = null;
try {
InputStream is = new FileInputStream("p.png");
ByteArrayOutputStream os = new ByteArrayOutputStream();
copy(is,os);
datas = os.toByteArray();
System.out.println(datas.length);
} catch (IOException e) {
e.printStackTrace();
}
//字节数组到文件
try {
InputStream is = new ByteArrayInputStream(datas);
OutputStream os = new FileOutputStream("p-copy.png");
copy(is,os);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 对接输入输出流
* try ...with...resource
* @param is
* @param os
*/
public static void copy(InputStream is,OutputStream os) {
try(is;os) {
//3、操作 (分段读取)
byte[] flush = new byte[1024]; //缓冲容器
int len = -1; //接收长度
while((len=is.read(flush))!=-1) {
os.write(flush,0,len); //分段写出
}
os.flush();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
报错:Variable resource not allowed here for source level below 9 原因应该是版本问题
实现放大器对声音的放大功能
package cn.dym;
/**
* 实现放大器对声音的放大功能
* @author Administrator
*
*/
public class DecorateTest01 {
public static void main(String[] args) {
Person p=new Person();
p.say();
System.out.println("-------------");
//装饰
Amplifier am=new Amplifier(p);
am.say();
}
}
interface Say{
void say();
}
class Person implements Say{
//属性
private int voice=10;
public void say() {
System.out.println("人的声音为:"+this.getVoice());
}
public int getVoice() {
return voice;
}
public void setVoice(int voice) {
this.voice = voice;
}
}
class Amplifier implements Say{
private Person p;
Amplifier(Person p){
this.p=p;
}
public void say() {
System.out.println("人的声音为:"+p.getVoice()*100);
System.out.println("噪音。。。。。");
}
}
模拟咖啡
package cn.dym;
/**
* 模拟咖啡
* 1、抽象组件:需要装饰的抽象对象(接口或抽象父类)
* 2、具体组件:需要装饰的对象
* 3、抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法
* 4、具体装饰类:被装饰的对象
*
*/
public class DecorateTest02 {
public static void main(String[] args) {
Drink coffee =new Coffee();
Drink suger =new Suger(coffee); //装饰
System.out.println(suger.info()+"-->"+suger.cost());
Drink milk =new Milk(coffee);//装饰
System.out.println(milk.info()+"-->"+milk.cost());
milk =new Milk(suger);//装饰
System.out.println(milk.info()+"-->"+milk.cost());
}
}
//抽象组件
interface Drink{
double cost(); //费用
String info(); //说明
}
//具体组件
class Coffee implements Drink{
private String name ="原味咖啡";
@Override
public double cost() {
return 10;
}
@Override
public String info() {
return name;
}
}
//抽象装饰类
abstract class Decorate implements Drink{
//对抽象组件的引用
private Drink drink;
public Decorate(Drink drink) {
this.drink =drink;
}
@Override
public double cost() {
return this.drink.cost();
}
@Override
public String info() {
return this.drink.info();
}
}
//具体装饰类
class Milk extends Decorate{
public Milk(Drink drink) {
super(drink);
}
@Override
public double cost() {
return super.cost()*4;
}
@Override
public String info() {
return super.info()+"加入了牛奶";
}
}
class Suger extends Decorate{
public Suger(Drink drink) {
super(drink);
}
@Override
public double cost() {
return super.cost()*2;
}
@Override
public String info() {
return super.info()+"加入了蔗糖";
}
}