Java的 io流( 五 )


写出一个字符
void
写出一个字符串
void write( str,int off,int len)
写出一个字符串的一部分
void write(char[ ] cbuf)
写出一个字符数组
void write(char[ ] cbuf,int off,int len)
写出字符数组的一部分
注意:
public static void main(String[] args) throws IOException {//参数为true,表示打开续写,默认为false,即关闭续写//殷勤昨夜三更雨,又得浮生一日凉 。——《鹧鸪天·林断山明竹隐墙》是a1.txt文件的内容FileWriter f1=new FileWriter("D:\\我的世界\\a1.txt",true);FileWriter f2=new FileWriter(new File("D:\\我的世界\\a1.txt"),true);//write(int c)//注意字节输出流和字符输出流的区别//字节输出流一次只能写入一个字节//字符输出流一次可以写入多个字节//写入到文件里的是字符集上对应的整数f1.write(25105);//这里是汉字 我 ,在Unicode中三个字节,所以在字节输出流中写不了//write(String str)f1.write("\r\n何日功成名遂了,还乡,醉笑陪公三万场 。");//write(String str,int off,int len)f1.write("\r\n何日功成名遂了,还乡,醉笑陪公三万场 。",0,9);//write(char[ ] cbuf)char []chars={'\r','\n','1','2','3','4','5'};f1.write(chars);//write(char[ ] cbuf,int off,int len)f1.write(chars,0,5);f1.close();//殷勤昨夜三更雨,又得浮生一日凉 。——《鹧鸪天·林断山明竹隐墙》我////何日功成名遂了,还乡,醉笑陪公三万场 。//何日功成名遂了//12345//123}
字符输入流原理解析
字符流读取数据时
数据源和内存先建立流通道,然后内存里会创建一个长度为8192的缓冲区
开始读取时,read方法会先从缓冲区寻找数据,会先判断缓冲区是否有数据,如果缓冲区没有数据,就从文件中读取数据,尽可能装满缓冲区,如果有数据,就直接从缓冲区读取数据,如果文件中也没有数据,就会返回-1
读取的数据存入缓冲区后,如果下面用清空文件,那么再次读取时只能读取到缓冲区的数据,未存入缓冲区的数据不能再读取
字符输出流底层原理
字符流写出数据时
数据源和内存先建立流通道,然后内存里会创建一个长度为8192的缓冲区
有两种方式可以让缓冲区的数据存储到目的地
1.缓冲区装满了
2.手动刷新(flush)
3.close方法
flush刷新完成后,还可以继续往文件中写入数据
字节流和字符流的使用场景
字节流:可以拷贝任意类型的文件
字符流:读取纯文本文件中的数据,往纯文本文件中写出数据
综合练习
public static void main(String[] args) throws IOException {File fu=new File("D:\\我的世界\\three");File f1=new File("D:\\我的世界\\one");CopyFolder(fu,f1);}public static void CopyFolder(File copyFile,File file) throws IOException {if(file.isDirectory()){File[] files = file.listFiles();for (File file1 : files) {if(file1.isFile()){//文件的copyString name = file1.getName();File newFile=new File(copyFile,name);FileOutputStream fos=new FileOutputStream(newFile);FileInputStream fis=new FileInputStream(file1);byte[]bytes=new byte[1024*1024];int len;while ((len=fis.read(bytes))!=-1){fos.write(bytes,0,len);}fis.close();fos.close();} else{String name = file1.getName();File newFile=new File(copyFile,name);newFile.mkdirs();//子文件夹的copyCopyFolder(newFile,file1);}}}}
异或^计算符,两边相同为false,两边不同为true
一个数异或另外一个数两次,这个数还会变为原来的数
例如:
sout(false^false);//falsesout(true^true);//falsesout(false^true);//truesout(true^false);//truesout(100^10)//110sout(100^10)//100