javawrite⽤法_javaWriter的基本使⽤
1、
1 packagecn.kongxh.io3;2
3 importjava.io.File ;
4 importjava.io.Writer ;
5 importjava.io.FileWriter ;
6 importjava.io.OutputStreamWriter;
7 public classWriterDemo01{
8 public static void main(String args[]) throws Exception{ //异常抛出,不处理
9 //第1步、使⽤File类到⼀个⽂件
10 File f= new File("d:" + File.separator + "") ; //声明File对象11 //第2步、通过⼦类实例化⽗类对象
12 Writer out = null ; //准备好⼀个输出的对象
13 out = new FileWriter(f) ; //通过对象多态性,进⾏实例化14 //第3步、进⾏写操作
15 String str = "Hello World" ; //准备⼀个字符串
16 out.write(str) ; //将内容输出,保存⽂件17 //第4步、关闭输出流
18 out.close() ; //关闭输出流19 //public class FileWriter extends OutputStreamWriter20 //public class OutputStreamWriter extends Writer FileWriter实际上继承⾃ OutputStreamWriter
21 }22 };
2、
1 packagecn.kongxh.io3;2
3 importjava.io.File ;
4 importjava.io.Writer ;
5 importjava.io.FileWriter ;
6 public classWriterDemo02{
7 public static void
main(String args[]) throws Exception{ //异常抛出,不处理8 //第1步、使⽤File类到⼀个⽂件
9 File f= new File("d:" + File.separator + "") ; //声明File对象10 //第2步、通过⼦类实例化⽗类对象
11 Writer out = null ; //准备好⼀个输出的对象
12 out = new FileWriter(f,true) ; //通过对象多态性,进⾏实例化13 //第3步、进⾏写操作
14 String str = "\r\nLIXINGHUA\r\nHello World" ; //准备⼀个字符串
15 out.write(str) ; //将内容输出,保存⽂件16 //第4步、关闭输出流
17 out.close() ; //关闭输出流
18 }19 };
3、
1 packagecn.kongxh.io3;2
3 importjava.io.File ;
4 importjava.io.Writer ;
5 importjava.io.FileWriter ;
6 public classWriterDemo03{
7 public static void
main(String args[]) throws Exception{ //异常抛出,不处理8 //第1步、使⽤File类到⼀个⽂件
9 File f= new File("d:" + File.separator + "") ; //声明File对象10 //第2步、通过⼦类实例化⽗类对象
11 Writer out = null ; //准备好⼀个输出的对象
12 out = new FileWriter(f) ; //通过对象多态性,进⾏实例化13 //第3步、进⾏写操作
14 String str = "Hello World" ; //准备⼀个字符串
15 out.write(str) ; //将内容输出,保存⽂件16 //第4步、关闭输出流17 //out.close() ;//此时,没有关闭
18 /*
19 * 不关闭 不会写⼊到⽂件中 证明还在缓存区,没有刷到⽂件中 如果关闭流(out.close();) 会强制刷新缓存区20 **/
21 }22 };
4、
1 packagecn.kongxh.io3;2
3 importjava.io.File ;
4 importjava.io.Writer ;
5 importjava.io.FileWriter ;
6 public classWriterDemo04{
7 public static void
main(String args[]) throws Exception{ //异常抛出,不处理8 //第1步、使⽤File类到⼀个⽂件
9 File f= new File("d:" + File.separator + "") ; //声明File对象10 //第2步、通过⼦类实例化⽗类对象
11 Writer out = null ; //准备好⼀个输出的对象
12 out = new FileWriter(f) ; //通过对象多态性,进⾏实例化13 //第3步、进⾏写操作
14 String str = "Hello World" ; //准备⼀个字符串
15 out.write(str) ; //将内容输出,保存⽂件16 //第4步、关闭输出流
17 out.flush() ; //强制性清空缓冲区中的内容18 //out.close() ;//此时,没有关闭
19 }20 };
5、案例
1 packagecn.kongxh.io3;
2 import java.io.*;
3 public classCopy{
4 public static voidmain(String args[]){
5 if(args.length!=2){ //判断是否是两个参数
6 System.out.println("输⼊的参数不正确。") ;
7 System.out.println("例:java Copy 源⽂件路径 ⽬标⽂件路径") ;
it(1) ; //系统退出
9 }10 File f1 = new File(args[0]) ; //源⽂件的File对象
11 File f2 = new File(args[1]) ; //⽬标⽂件的File对象
12 if(!f1.exists()){13 System.out.println("源⽂件不存在!") ;it(1) ;15 }16 InputStream input = null ; //准备好输⼊流对象,读取源⽂件
17 OutputStream out = null ; //准备好输出流对象,写⼊⽬标⽂件
18 try{19 input = newFileInputStream(f1) ;20 }catch(FileNotFoundException e){21 e.printStackTrace() ;22 }23 try{24 out = newFileOutputStream(f2) ;25 }catch(FileNotFoundException e){26 e.printStackTrace() ;27 }28 if(input!=null && out!=null){ //判断输⼊或输出是否准备好
29 int temp = 0;30 try{31 while((ad())!=-1){ //开始拷贝
32 out.write(temp) ; //边读边写
33 }34 System.out.println("拷贝完成!") ;35 }catch(IOException e){36 e.printStackTrace() ;37 System.out.println("拷贝失败!") ;38 }39 try{40 input.close() ; //关闭
41 out.close() ; //关闭
42 }catch(IOException e){43 e.printStackTrace() ;44 }45 }46 }47 }
总结:
⽂件IO操作、字节流和字符流
⽆缓冲区 阻塞
实际上字节流在操作时本⾝不会⽤到缓冲区(内存),是⽂件本⾝直接操作的,⽽字符流在操作时使⽤了缓冲区,通过缓冲区再操作⽂件
提问:什么叫缓冲区?
在很多地⽅都碰到缓冲区这个名词,那么到底什么是缓冲区?⼜有什么作⽤呢?
回答:缓冲区可以简单地理解为⼀段内存区域。
可以简单地把缓冲区理解为⼀段特殊的内存。
某些情况下,如果⼀个程序频繁地操作⼀个资源(如⽂件或数据库),则性能会很低,此时为了提升性能,就可以将⼀部分数据暂时读⼊到内存的⼀块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会⽐较快,这样可以提升程序的性能。
在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使⽤了缓冲区暂存数据。
如果想在不关闭时也可以将字符流的内容全部输出,则可以使⽤Writer类中的flush()⽅法完成。
在回答之前,先为读者讲解这样的⼀个概念,所有的⽂件在硬盘或在传输时都是以字节的⽅式进⾏的,包括图⽚等都是按字节的⽅式存储的,⽽字符是只有在内存中才会形成,所以在开发中,字节流使⽤较为⼴泛。
字节流与字符流主要的区别是他们的的处理⽅式
exists的用法流分类:
1.Java的字节流
InputStream是所有字节输⼊流的祖先,⽽OutputStream是所有字节输出流的祖先。
2.Java的字符流(字符只存在内存⾥)
Reader是所有读取字符串输⼊流的祖先,⽽writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
字节流是最基本的,所有的InputStream和OutputStream的⼦类都是,主要⽤在处理⼆进制数据,它是按字节来处理的
但实际中很多的数据是⽂本,⼜提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进⾏字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统⼀⽽造成的
在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有⼀个关键的参数字符集编码,通常我们都省略了,那系统就⽤操作系统的lang
⽽在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[] Bytes(String charsetName)
也是⼀样的道理
⾄于java.io中还出现了许多其他的流,按主要是为了提⾼性能和使⽤⽅便,
如BufferedInputStream,PipedInputStream等
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论