------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.装饰模式比继承要灵活,避免了继承体系臃肿,而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。/*
装饰设计模式:
当想要对已有对象功能进行加强时,可以定义类将已有对象传入,基于已有功能,并提供加强功能。
那么自定义的该类称为装饰类
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。
*/
class Person
{
public void eat()
{
System.out.println("吃饭、。。。");
}
}
class SuperPerson
{
Person p = null;
SuperPerson(Person p )
{
this.p = p;
}
public void superEat()
{
System.out.println("drink wine");
p.eat();
System.out.println("eat tian dian ");
}
}
class PersonDemo
{
public static void main(String[] args)
{
SuperPerson p = new SuperPerson(new Person());
p.superEat();
}
}
/*
复制一个图片
思路:
1.用字节读取流对象和图片关联
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3.通过循环读写,完成数据的存储
4.关闭资源
*/
import java.io.*;
class CopyPic
{
public static void main(String[] args)
{
FileInputStream fis = null;
FileOutputStream fos = null;
try
{
fis = new FileInputStream("a.jpg");
fos = new FileOutputStream("a_copy.jpg");
byte[] buff1 = new byte[1024];
int num = 0;
while((num=fis.read(buff1))!=-1)
{
fos.write(buff1,0,num);
}
}
catch(IOException e)
{
throw new RuntimeException("读取出错了。。");
}
finally
{
try
{
if(fis != null)
{
fis.close();
}
if(fos != null)
{
fos.close();
}
}
catch(IOException e)
{
throw new RuntimeException("关闭资源出错了。。");
}
}
}
}
/*
通过字节流缓冲区完成复制
*/
import java.io.*;
class CopyMp3
{
public static void main(String[] args)
{
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
bis = new BufferedInputStream(new FileInputStream("0.mp3"));
bos = new BufferedOutputStream(new FileOutputStream("0_copy.mp3"));
int ch = 0;
while((ch = bis.read())!=-1)
{
bos.write((char)ch);
}
}
catch(IOException e)
{
throw new RuntimeException("读取出错了");
}
finally
{
try
{
if(bis != null)
{
bis.close();
}
if(bos != null)
{
bos.close();
}
}
catch(IOException e)
{
throw new RuntimeException("关闭资源出错了。。");
}
}
}
}
/*
读取键盘录入。
System.out:对应的是标准输出设备,控制台。
System.in:对应的标准输入设备:键盘。
键盘录入,录入一行就打印,当录入over就结束
*/
import java.io.*;
class ReadIn
{
public static void main(String[] args) throws IOException
{
//获取键盘输入数据
InputStream in = System.in;
int temp = 0;
//定义缓冲区,将每一行键盘录入的数据存入缓冲区中
StringBuilder sb = new StringBuilder();
while(true)
{
temp = in.read();
if(temp == '\r')
continue;
if(temp == '\n')
{
//如果输入一行是over就接收程序
if("over".equals(sb.toString()))
{
System.out.println(sb.toString());
break;
}else
{
//输出一行录入的数据并,将缓冲区清零。
System.out.println(sb.toString());
sb.delete(0,sb.length());
}
} else
{
sb.append((char)temp);
}
}
}
}
/*
InputStreamReader 是字节流通向字符流的桥梁
OutputStreamWriter是字符流通向字节流的桥梁
*/
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args) throws IOException
{
//获取键盘录入
InputStream in = System.in;
//字节流转化为字符流
InputStreamReader isr = new InputStreamReader(in);
//使用缓冲区,提高效率
BufferedReader br = new BufferedReader(isr);
//将字符流转坏为字节流输出到屏幕
OutputStream os = System.out;
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bufw = new BufferedWriter(osw);
String temp = null;
while((temp=br.readLine())!=null)
{
if("over".equals(temp))
break;
bufw.write(temp.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}
/*
异常的日志信息
思路:e.printStackTrace(System.out) == e.printStackTrace();
而System.setOut(PrintStream out); 这样就可以将错误信息存入一个指定的文件中。
*/
import java.text.*;
import java.io.*;
import java.util.*;
class ExceptionInfo
{
public static void main(String[] args)
{
PrintStream ps = null;
try
{
int[] a = new int[2];
System.out.println(a[2]);
}catch(Exception e)
{
try
{
//创建错误日志
ps= new PrintStream("log.txt");
//获取当前时间,并进行转化格式
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(d);
//将时间字符串输入日志中
ps.println(date);
//重新设置输出流
System.setOut(ps);
e.printStackTrace(System.out);
}
catch(IOException ex)
{
throw new RuntimeException("日志创建失败");
}
finally
{
try
{
if(ps != null)
{
ps.close();
}
}
catch(RuntimeException exx)
{}
}
}
}
}
import java.util.*;
import java.io.*;
class SystemInfo
{
public static void main(String[] args) throws IOException
{
Properties p = System.getProperties();
p.list(new PrintStream("systemInfo.txt"));
}
}
/*File类的演示
1.创建
boolean createNewFile(); 在指定位置创建文件,如果该文件已存在,则不创建,返回false
File f = new File("a.txt");不会创建出对象,只有执行了createNewFile()才可以
和输出流不一样,输出流对象一创建文件,如果文件存在,会被覆盖
boolean mkdir()创建文件夹
boolean mkdirs()创建多级目录
2.删除
boolean delate(); 删除失败返回false。如果文件正在被使用,则删除不了返回falsel
void deleteOnExit() 在程序退出时,删除指定文件
3.判断
isFile() 文件是否存在
isHidden() 是否为隐藏文件
isAbsolute() 是否为绝对路径
isDirectory() 是否是一个目录
4.获取信息
f2.renameTo(f1);
*/
import java.io.*;
class FileDemo
{
public static void main(String[] args)throws IOException
{
//consMethod();
method_5();
}
//创建File对象
public static void consMethod() throws IOException
{
//将a.txt封装成file对象,可以将已有的和未出现的文件或者文件夹封装成对象。
File f1 = new File("d.txt");
File f2 = new File("c:\\abc","b.txt");
File f3 = new File("c:\\abcc");
File f4 = new File(f3,"c.txt");
//separator 与系统有关的默认分割符
File f5 = new File("c:"+File.separator+"d.txt");
sop("f1:"+f1);
sop("f2:"+f2);
sop("f3:"+f3);
sop("f4:"+f4);
sop("f5:"+f5);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void method_1() throws IOException
{
File f = new File("aa\\a.txt");
sop(f.createNewFile());
sop(f.delete());
}
public static void method_2() throws IOException
{
File f = new File("FileDemo.java");
//sop("是否存在?"+f.exists());
//sop("可执行?"+f.canExecute());
File f1 = new File("abcd");
File f2 = new File("abc\\cc\\dd\\ff\\ee\\cc");
sop("是否创建目录"+f1.mkdir());
sop("是否创建多级目录"+f2.mkdirs());
}
public static void method_3() throws IOException
{
File f = new File("hello.java");
f.createNewFile();
sop("文件?"+f.isFile());
File f1 = new File(".java");
sop("文件?"+f.isFile());
sop("绝对路径?"+f1.isAbsolute());
sop("目录?"+f1.isDirectory());
}
public static void method_4() throws IOException
{
File f = new File("c\\e.java");
sop("获取相对路径"+f.getPath());//即获取括号内的内容
sop("获取绝对路径"+f.getAbsolutePath());
//返回的是绝对路径中的父目录,如果获取的是相对路径,则返回null
//如果相对路径中有上层目录,那么该目录就是返回结果
sop("获取此目录的父目录"+f.getParent());
}
public static void method_5() throws IOException
{
File f1 = new File("d:\\Test.txt");
File f2 = new File("c:\\Hello.txt");
/*
相当于剪切,并且可以重命名
将d盘下的Test.txt剪切到c盘下,并且重命名为Hello.txt
*/
sop(f1.renameTo(f2));
}
}
import java.io.*;
class FileDemo2
{
public static void main(String[] args)throws IOException
{
ListDemo();
}
//File对象必须是封装了一个目录,该目录必须存在
public static void ListDemo()
{
//如果文件d.txt下面没有其他文件,则输出空
File f = new File("f:\\d.txt");
String[] lists = f.list();
for(String s:lists)
{
sop(s);
}
}
//列出所有盘符
public static void listRoots()
{
File[] f1 = File.listRoots();
for(File f:f1)
{
sop(f);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}