JAVASE学习笔记第19天
来源:互联网 发布:收购阿里云发票 编辑:程序博客网 时间:2024/05/02 06:45
IO流(BufferWriter)
字符流的缓冲区:
l 缓冲区的出现提高了对数据的读写效率。
l 对应的类:
² BufferWriter
² BufferReader
l 缓冲区要结合流才能使用(也就是说在创建缓冲区之间必须有流对象)
l 在流的基础上对流的功能进行了增强
例子:
import java.io.*;
class Demo1
{
publicstatic void main(String[] args)throws IOException
{
//创建一个写入流对象
FileWriterfw = new FileWriter("lili.txt");
//创建一个缓冲区
//缓冲区的引入就是为了提高效率,
//创建缓冲区只需要将流对象作为参数传递给缓冲区的构造函数即可
BufferedWriterbw = new BufferedWriter(fw);
bw.write("aaaa");
bw.newLine();
bw.write("lilililii");
bw.newLine();//在缓冲区中有特点的方法,用来换行。
//记住只要有缓冲区就要刷新
bw.flush();
//其实缓冲区关闭的是传进来的流
bw.close();
}
}
IO流(BufferReader)
1、字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法readLine,方便对文本的读取,当读到文本的末尾的时候,返回的是null
2、例子:
importjava.io.*;
class Demo2
{
public static void main(String[] args)throwsIOException
{
//创建一个字符读取流对象
FileReaderfr = new FileReader("lili.txt");
//创建一个读取缓冲区对象
//其实就是将读取流对象作为参数传递给读取缓冲区对象
BufferedReader br = newBufferedReader(fr);
for(String s=null;(s=br.readLine())!=null;)
{
System.out.println(br.readLine());//读取一行
}
br.close();
}
}
IO流(通过缓冲区复制文本文件)
/**
需求:
将一个Java文件中的内容复制到另外一个文件中
注意:readLine中读取的内容不包括换行符。
*/
import java.io.*;
class CopyByBuf
{
publicstatic void main(String[] args)
{
//定义引用
BufferedReaderbuffr = null;
BufferedWriterbuffw=null;
try
{
//创建对象
buffr= new BufferedReader(new FileReader("Demo1.java"));
buffw= new BufferedWriter(new FileWriter("Demo1_copy.txt"));
Stringlen =null;
while((len=buffr.readLine())!=null)
{
buffw.write(len);
buffw.newLine(); //要自己手动换行
buffw.flush();
}
}
catch(IOException e)
{
thrownew RuntimeException("读写失败");
}
finally
{
try
{
if(buffr!=null)
{
buffr.close();
}
}
catch(IOException e)
{
thrownew RuntimeException("读取失败");
}
try
{
if(buffw!=null)
{
buffw.close();
}
}
catch(IOException e)
{
thrownew RuntimeException("写入失败");
}
}
}
}
IO流(MyBufferedReader)
/**
需求:自己定义一个类,类中包含一个功能和readLine一致的方法
*/
import java.io.*;
//定义自己的读取缓冲区
class MyBufferedReader
{
privateFileReader fr;
MyBufferedReader(FileReaderfr)
{
this.fr=fr;
}
//定义自己的readLine方法
publicString myreadLine()throws IOException
{
//定义一个数组
StringBuildersb = new StringBuilder();
intlen=0;
while((len=fr.read())!=-1)
{
if(len=='\r')
continue;
if(len=='\n')
returnsb.toString();
//else
sb.append((char)len);
}
//注意这个哦
if(sb.length()!=0)
returnsb.toString();
returnnull;
}
publicvoid myclose()throws IOException
{
fr.close();
}
}
class Demo3
{
publicstatic void main(String[] args)throws IOException
{
FileReaderfr = new FileReader("lili.txt");
MyBufferedReadermbr =new MyBufferedReader(fr);
Stringlen = null;
while((len=mbr.myreadLine())!=null)
{
System.out.println(len);
}
mbr.myclose();
}
}
IO流(装饰设计模式)
/**
装饰设计模式:
当想要对已经有的对象进行功能增强的时候,
可以定义类,激昂已经有的对象导入,基于已经有的功能,提出加强的功能
那么自定义的该类成为装饰类。
装饰类通常会通过构造方法接受装饰对象。
并基于被装饰对象,提供更强的功能。
装饰类和继承的区别
装饰设计比继承要灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系
装饰类的好处还在于它无需改动原来的代码。
继承类的体系:
Reader
|---TextReader
|----TextBufferedReader
|---MediaReader
|----MediaBufferedReader
装饰类
Reader
|--TextReader
|--MediaReader
|--BufferedReader
注意:
装饰类因为增强已有对象,所以具备的功能和已有对象的相同,
只不过提供了更强的功能。所以装饰类和被装饰类通常都属于一个体系中
*/
//原来的类
class Person
{
publicvoid chifan()
{
System.out.println("吃饭");
}
}
//装饰类
class SueprPerson
{
//将对象传进来
privatePerson p ;
SueprPerson(Personp)
{
this.p=p;
}
publicvoid chifan()
{
System.out.println("开胃酒");
p.chifan();
System.out.println("甜点");
}
}
//调用类
class Demo4
{
publicstatic void main(String[] args)
{
Personp =new Person();
//以前的使用方法
//p.chifan();
//装饰之后
SueprPersonsp = new SueprPerson(p);
sp.chifan();
}
}
IO流(LineNumberReader)
/**
LineNumberReader:
也是一个装饰类。
跟踪行号的字符缓冲流。
*/
import java.io.*;
class Demo5
{
publicstatic void main(String[] args)throws IOException
{
FileReaderfr = new FileReader("Demo1.java");
LineNumberReaderlnr = new LineNumberReader(fr);
//设置行号
lnr.setLineNumber(100);
for(Stringlen=null;(len=lnr.readLine())!=null;)
{
System.out.println(lnr.getLineNumber()+" "+len); //带行号打印
}
}
}
IO流(MyLineNumberReader)
/**
需求:模拟一个LineNumberReader
*/
import java.io.*;
//模拟一个BufferedReader装饰类
class myBufferedReader extends Reader //继承Reader,说明它也是Reader体系中的一员
{
privateReader r; //定义Reader的对象,可以接收一组Reader的类中的对象了
myBufferedReader(Readerr) //装饰类的特点,使用构造函数将被装饰类的传递进来
{
this.r= r;
}
//模拟reaLine方法
//其实关于读取的方法在底层都是调用了read方法
/*readLine的工作原理就是
1。创建一个容器,用来存贮读出来的字符,(在BufferedReader中这个容器是个字符数组)
2。遍历文件中的字符
3。在遍历的过程中,如果读到'\r',进入下一循环;如果读到'\n',从容器中把一行的内容输出;否则,就向容器里存入读到的字符。
4。因为在整个文件的末尾,有可能不存在\r\n,所以会导致少输出一行,这时就在遍历完之后,在文件的末尾再判断一下,
如果文件的长度!=0,则再输出容器中的内容。
*/
publicString myReadLine()throws IOException //这里一般不抛
{
//创建一个容器
StringBuildersb = new StringBuilder();
//遍历文件
intch =0;
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
returnsb.toString();
else
sb.append((char)ch);//转换为字符
}
if(sb.length()!=0)
returnsb.toString();
returnnull;
}
//覆盖Reader 类中的抽象方法
publicint read(char[] cbuf,int off,int len) throws IOException
{
returnr.read(cbuf,off,len) ;
}
publicvoid close()throws IOException
{
r.close();
}
}
//--------------------------------------------------------------------------------------------------------------
//模拟一个LineNumberReader方法
class MyLineNumberReader extendsmyBufferedReader //继承MyBufferedReader
{
privateint lineNumber;
MyLineNumberReader(Readerr)
{
super(r);
}
publicvoid setLineNumber(int lineNumber)
{
this.lineNumber=lineNumber;
}
publicint getLineNumber()
{
returnlineNumber;
}
publicString myReadLine()throws IOException
{
lineNumber++; //每次调用myReadLine的时候,行号加1
returnsuper.myReadLine();
}
}
//-----------------------------------------------------------
//调用者
class Demo6
{
publicstatic void main(String[] args)throws IOException
{
FileReaderfr = new FileReader("Demo1.java");
myBufferedReadermbr = new myBufferedReader(fr);
MyLineNumberReadermbr1 = new MyLineNumberReader(fr);
Stringlen =null;
while((len=mbr1.myReadLine())!=null)
{
System.out.println(mbr1.getLineNumber()+"cc"+len);
}
mbr1.close();
}
}
IO流(字节流File读写操作)
/**
字符流:
FileReader
FileWriter
BufferedReader
BufferedWriter
字节流:
InputStream OutputStream
需求:想要操作图片数据,这是就要用到字节流
*/
import java.io.*;
class Demo7
{
publicstatic void main(String[] args)throws IOException
{
readFile_3();
}
//写
publicstatic void writeFile()throws IOException
{
//创建对象
FileOutputStreamfos = new FileOutputStream("fos.txt");
//写入
fos.write("adddd".getBytes());//将字符串装换外字节:getBytes(); 将字符串转换为字符toCharArray()
//关闭资源 ,字节的不用刷新哦
fos.close();
}
//一个一个的读
publicstatic void readFile_1()throws IOException
{
FileInputStreamfis = new FileInputStream("fos.txt");
intch=0;
while((ch=fis.read())!=-1)
{
System.out.println((char)ch);
}
}
//读取一组
publicstatic void readFile_2()throws IOException
{
FileInputStreamfis = new FileInputStream("fos.txt");
//定义一个容器
byte[]buf = new byte[1024];
intlen=0;
while((len=fis.read(buf))!=-1)
{
System.out.println(newString(buf,0,len));
}
fis.close();
}
//特有的方法:int avaliable() 返回的是文件中的字节数,包括回车符
publicstatic void readFile_3()throws IOException
{
FileInputStreamfis = new FileInputStream("fos.txt");
//定义一个容器
intnum=fis.available();
byte[]buf = new byte[num]; //应用,但是不建议用这种方法,有可能内存崩溃
intlen=0;
while((len=fis.read(buf))!=-1)
{
System.out.println(newString(buf,0,len));
}
fis.close();
}
}
IO流(拷贝图片)
/**
需求:拷贝图片
思路:
1,创建一个字节流读取对象,与图片相关联
2,创建一个字节写入流对象,用于存储读取到的数据
3,通过读取操作读取数据
4,关闭资源
注意:以后看一个图片的时候,首相要看一下图片的属性,查看大小
*/
import java.io.*;
class Demo8
{
publicstatic void main(String[] args)
{
//定义引用
FileOutputStreamfos = null;
FileInputStreamfis = null;
try
{
//创建对象并相关联
fos=newFileOutputStream("F:\\2.jpg");
fis=new FileInputStream("F:\\我.jpg");
intlen=0;
byte[]buf = new byte[1024];
while((len=fis.read(buf))!=-1) //记住read方法
{
fos.write(buf,0,len); //记住write方法。
}
}
catch(IOException e)
{
thrownew RuntimeException("图片读写失败");
}
finally
{
try
{
if(fis!=null)
fis.close();
}
catch(IOException e)
{
thrownew RuntimeException("图片读取失败");
}
try
{
if(fos!=null)
fos.close();
}
catch(IOException e)
{
thrownew RuntimeException("图片写入失败");
}
}
}
}
IO流(字节流的缓冲区)
/**
字节流的缓冲区:
BufferedInputStream
BufferedOutputStream
*/
import java.io.*;
class Demo9
{
publicstatic void main(String[] args)
{
copyMp3();
}
publicstatic void copyMp3()
{
//创建引用
FileInputStreamfis=null;a
FileOutputStreamfos =null;
BufferedInputStreambufi=null;
BufferedOutputStreambufo=null;
try
{
//创建对象
fis=new FileInputStream("F:\\1.mp3"); //读
fos=new FileOutputStream("F:\\2.mp3"); //写
bufo= new BufferedOutputStream(fos); //写
bufi= new BufferedInputStream(fis); //读
//读写
for(intlen=0;(len=bufi.read())!=-1;)
{
bufo.write(len);
}
}
catch(IOException e)
{
thrownew RuntimeException("读写失败");
}
finally
{
try
{
if(bufo!=null)
bufo.close();
}
catch(IOException e)
{
thrownew RuntimeException("写入文件失败");
}
try
{
if(bufi!=null)
bufi.close();
}
catch(IOException e)
{
thrownew RuntimeException("读取文件失败");
}
}
}
}
注意:out是写,in :读
IO流(自定义字节流的缓冲区)
真的不容易啊!!!!!!!
/**
自定义:BufferedInputStream
原理:
1,调用FileInputStream的read方法,从文件中抓取一部分数据,然后存放到自定义的字节数组中
2,使用BufferedInputStream的read方法读取数据
3,第一次抓取的数据读完了之后,再次从文件中抓取数据,放入到自定义数组中,重复2
步骤
1,自定义数组,指针、计数器
2,当count==0的时候,抓数据 ,如果count<0(也就是文件中没有数据,返回-1)
3,当count>0的时候,读取数据
*/
import java.io.*;
//自定义BufferedInputStream类,是一个装饰类
class MyBufferedInputStream
{
//被装饰的类
FileInputStreamfis;
MyBufferedInputStream(FileInputStreamfis)
{
this.fis=fis;
}
//数组
byte[]buf = new byte[1024];
//指针、计数器
intpos=0,count=0;
//定义myRead方法,一次读取一个字节
publicint myRead()throws IOException
{
//抓取数据
if(count==0)
{
count=fis.read(buf);
if(count<0)
return-1;
pos=0;
byteb =buf[pos];
count--;
pos++;
returnb&255; //因为byte会被向上提升,防止出现-1的情况,这样只取后8位
}
elseif(count>0)
{
byteb =buf[pos];
count--;
pos++;
returnb&255;
}
return-1; //这个无所谓
}
publicvoid myclose()throws IOException
{
fis.close();
}
}
//-----------------------------------------------------------------
class Test1
{
publicstatic void main(String[] args)throws IOException
{
copyMp3();
}
publicstatic void copyMp3()throws IOException
{
//创建引用
FileInputStreamfis=null;
FileOutputStreamfos =null;
MyBufferedInputStreambufi=null;
BufferedOutputStreambufo=null;
try
{
//创建对象
fis=new FileInputStream("F:\\1.mp3"); //读
fos=new FileOutputStream("F:\\3.mp3"); //写
bufo= new BufferedOutputStream(fos); //写
bufi= new MyBufferedInputStream(fis); //读
//读写
for(intlen=0;(len=bufi.myRead())!=-1;)
{
bufo.write(len);
}
}
catch(IOException e)
{
thrownew RuntimeException("读写失败");
}
finally
{
try
{
if(bufo!=null)
bufo.close();
}
catch(IOException e)
{
thrownew RuntimeException("写入文件失败");
}
try
{
if(bufi!=null)
bufi.myclose();
}
catch(IOException e)
{
thrownew RuntimeException("读取文件失败");
}
}
}
}
IO流(读取键盘录入)
/**
字符流:
FileWriter
FileReader
BufferedWriter
BufferedReader
字节流:
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
在System类中
System.in: 标准的输入,对应的设备是:键盘
System.out:标准的输出,对应的设备是:控制台
对于System.in的描述:public static final InputStream in
我们知道他的类型是InputStream
*/
/**
需求:
通过键盘录入数据。
当录入一行数据之后,就将该行数据进行打印。
如果录入的数据是over,那么就停止录入。
思路:
1,定义一个InputStream对象来接收键盘录入的数据
2,定义一个缓冲区,用来存放每次录入的数据
3,循环录入数据
4,在循环的过程中进行判断
如果ch=='\r' ,进入到下一次的循环;
如果ch=='\n',如果遇到"over",停止录入;否则,打印。//????
import java.io.*;
class Test2
{
publicstatic void main(String[] args)throws IOException
{
//定义对象
InputStreamin = System.in;
StringBuildersb = new StringBuilder();
while(true)
{
intch =in.read();
if(ch=='\r')
continue;
if(ch=='\n')
{
Stringstr = sb.toString();
if(str.equals("over"))
break;
System.out.println(str);
sb.delete(0,sb.length());//清空
}
else
sb.append((char)ch);
}
}
}
*/
IO流(读取转换流)
/**
上面的代码过于复杂
录入一行数据,这让我们想到了Reader类中的readLine()方法
但是键盘录入对象是一个InputStream对象,我们发现Reader
有一个子类叫做InputStreamReader可以将InputStream对象
抓换为Reader对象
*/
import java.io.*;
class Test2
{
publicstatic void main(String[] args)throws IOException
{
//创建键盘录入对象
InputStreamin = System.in;
//将字节流对象转换为字符流对象
InputStreamReaderisr =new InputStreamReader(in);
//为了提高效率,使用BufferedReader方法
BufferedReaderbr = new BufferedReader(isr);
Stringlen=null;
while((len=br.readLine())!=null)
{
if(len.equals("over"))
break;
System.out.println(len);
}
br.close();
}
}
IO流(写入转换流)
/**
将字符流转换为字节流的方法:
OutputStreamWriter类
使用上述内容,将System.out.println替换。
*/
import java.io.*;
class Test3
{
publicstatic void main(String[] args)throws IOException
{
//创建键盘录入对象
InputStreamin = System.in;
//将字节流对象转换为字符流对象
InputStreamReaderisr =new InputStreamReader(in);
//为了提高效率,使用BufferedReader方法
BufferedReaderbr = new BufferedReader(isr);
BufferedReaderbufr =
new BufferedReader(newInputStreamReader(System.in)); //这句话必须记住!!!!!!!!!!!!!
//------------------------------------------------------------------------------------------
//创建键盘输出对象那
OutputStreamout = System.out;
//将字节流转换为字符流
OutputStreamWriterosw = new OutputStreamWriter(out);
//使用BufferedWriter方法,从而使用换行
BufferedWriterbw = new BufferedWriter(osw);
BufferedWriterbufw =
newBufferedWriter(new OutputStreamWriter(System.out));
//--------------------------------------------------------------
Stringlen=null;
while((len=br.readLine())!=null)
{
if(len.equals("over"))
break;
bw.write(len);
bw.newLine();
bw.flush();//写的不要忘记刷新
}
br.close();
}
}
IO流(流操作的规律)(重点)
/**
关于流操作的处理:
1,需求:
源:键盘
目的:控制台
2,需求:想把键盘录入的数据存储到一个文件中
源:键盘
目的:文件
3,需求:想要将一个文件的数据打印在控制台上
源:文件
目的:控制台
//----------------------------------------------------------------------------------
综上可以总结出:
流对象的操作规律:
1,明确源和目的
源:输入流,InputStream 、Reader
目的:输出流:OutputStream 、Writer
2,是否为纯文本文件
是:字符流 ,Reader、Writer
不是:字节流,InputStream,OutputStream
3,经过以上两步,体系已经明确了,接下来通过具体的设备来区分具体使用什么对象
源:内存、硬盘、键盘
目的:内存、硬盘、控制台
4,经过以上三步,确定了对象之后,接下来,接下来考虑是否需要提高效率
是:用缓冲器
不是:不用缓冲器
//----------------------------------------------------------------------------
练习:将一个文本文件中的数据存储到另外一个文本文件中,复制文件
思路:
1,明确源和目的:
源:输入流:InputStream、 Reader
是否为纯文本文件?
是:Reader
具体的设备?
硬盘:FileReader
是否需要提高效率?
需要:创建Reader体系中的缓冲器对象
BufferedReaderbufr =
newBufferedReader(new FileReader("a.txt"));
目的:输出流:OutputStream 、Writer
是否为纯文本文件?
是:Writer
具体的设备?
硬盘:FileWriter
是否需要提高效率?
需要:创建Writer体系中的缓冲器
BufferedWriterbw =
newBufferedWriter(new FileWriter("b.txt"));
//----------------------------------------------------------------------------
练习:将一个字节文件中的数据存储到另外一个字节文件中,复制文件
思路:
1,明确源和目的?
源:输入流,InputStream、Reader
是否为纯文本文件?
不是:InputStream
具体的设备?
硬盘:FileInputStream
是否提高效率?
是:创建InputStream体系中的缓冲器
BufferedInputStreambufis =
new BufferedInputStream(newFileInputStream("a.jpg"));
目的:输出流,OutputStream、Writer
是否为纯文本文件?
不是:OutputStrream
具体的设备?
硬盘:FileOutputStream
是否提高效率?
是:创建OutputStream体系中的缓冲器
BufferedOutputStream bufos =
newBufferedOutputStream(new FileOutputStream("b.txt"));
//--------------------------------------------------------------------------------------------------------
FileReader和FileWriter中的编码格式为默认的格式,都是GBK
转换流什么时候使用呢?
字符和字节之间转换的桥梁,通常,涉及到字符编码的时候,
会用到转换流。
需求:将键盘录入的数据保存到一个文件中
1,明确源和目的
源:输入流,InputStream ,Reader
是否为纯文本文件?
是:Reader
具体设备?
键盘:
分析:键盘录入对应的具体的对象是System.in
但是System.in对应的是InputStream
这就导致和我们的原来的体系不同了,
所以使用Reader体系中的InputStreamReader
将字节流转换为字符流
new InputStreamReader(System.in);
是否提高效率?
是:使用Reader体系中的BufferedReader
BufferedReaderbufr =
newBufferedReader(new InputStreamReader(System.in));
目的:输出流,OutputStream ,Writer
是否为纯文本呢?
是:Writer
具体的设备?
硬盘:FileWriter
是否提高效率?
是:创建Writer体系中的缓冲器
BufferedWriterbufw =
newBufferedWriter(new FileWriter("a.txt"));
***********************************************************
拓展:在以上的基础上,想要把指定的数据按照指定的编码表
(UNF-8),存储到文件中。
FileWriter中的编码是GBK,用到了编码转换,想到了转换流
OutputStreamWriter,而该转换流的对象是一个字符流的对象,
由于我们的目的是纯文本,而且设备是硬盘,所以选择:FileWriter,
OutputStreamWriteroutw =
newOutputStreamWriter(new FileWriter("a.txt"),"UNF-8");
为了提高效率:
BufferedWriterbufw =
newBufferedWriter(new OutputStreamWriter(newFileWriter("a.txt"),"UNF-8"));
*/
import java.io.*;
class Test4
{
publicstatic void main(String[] args)throws IOException
//1,键盘录入
//BufferedReaderbufr=
//newBufferedReader(new InputStreamReader(System.in));
//3,文件的录入
BufferedReaderbufr=
newBufferedReader(new InputStreamReader(newFileInputStream("Test1.java")));
//1,键盘输出
BufferedWriterbufw=
newBufferedWriter(new OutputStreamWriter(System.out));
//2,文件输出
//BufferedWriterbufw=
//newBufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));
//读取一行的操作
Stringline=null;
while((line=bufr.readLine())!=null)
{
if(line.equals("over")) //加入结束标志,这样就不需要用到ctrl+c结束了
break;
bufw.write(line); //读取一行
bufw.newLine();//读完一行空格
bufw.flush(); //关于写的得刷新,才能将流中的内容写入出来
}
//关闭
bufr.close();
bufw.close();//这句话也可以省略,因为控制台结束,我们使用了over做判断
}
}
IO流(改变标准输入输出设备)
import java.io.*;
class Test5
{
publicstatic void main(String[] args)throws IOException
{
//改变键盘录入
//System.setIn(newFileInputStream("Test1.java"));
//改变输出设备
System.setOut(newPrintStream("haha.txt"));
//键盘录入
BufferedReaderbufr =
newBufferedReader(new InputStreamReader(System.in));
//键盘输出
BufferedWriterbufw =
newBufferedWriter(new OutputStreamWriter(System.out));
//读取
String line = null;
while((line=bufr.readLine())!=null)
{
if(line.equals("over"))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
IO流(异常日志信息)(专门的东西是 log4j)
/**
异常日志信息文件的创建
*/
import java.io.*;
import java.util.*;
import java.text.*;
class Test6
{
publicstatic void main(String[] args)
{
try
{
int[]arr =new int[2];
System.out.println(arr[3]);
}
catch(Exception e)
{
try
{
//时间
Datedate =new Date();
SimpleDateFormatsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Stringstr=sdf.format(date);
//指定输出设备
PrintStreamps = new PrintStream("zz.log");
ps.println(str);
System.setOut(ps);
//e.printStackTrace();
//这句话其实底层调用的printStackTrace(PrintStream s)方法,将System.out作为对象传递过来了
}
catch(IOException ex)
{
thrownew RuntimeException("异常日志创建失败");
}
}
}
}
- JAVASE学习笔记第19天
- JAVASE学习笔记第5天
- JAVASE学习笔记第6天
- JAVASE学习笔记第7天
- JAVASE学习笔记第8天
- JAVASE学习笔记第9天
- JAVASE学习笔记第10天
- JAVASE学习笔记第11天
- JAVASE学习笔记第12天
- JAVASE学习笔记第13天
- JAVASE学习笔记第14天
- JAVASE学习笔记第15天
- JAVASE学习笔记第16天
- JAVASE学习笔记第17天
- JAVASE学习笔记第18天
- JAVASE学习笔记第20天
- JAVASE学习笔记第21天
- JAVASE学习笔记第22天
- 数据结构(c++版)
- JAVASE学习笔记第18天
- Minicom的使用
- 马士兵struts2视频教程第四十集
- PHP搭建OAuth2.0
- JAVASE学习笔记第19天
- HTML5魔法堂:全面理解Drag & Drop API
- 同别人交流的经验
- 开博随想
- SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库)
- 移动应用缓存设计
- 经典的sizeof和strlen
- JAVASE学习笔记第20天
- iptables命令解析