课前复习:
1、什么是io流,如何分类
流向:
输入:InputStream,Reader
输出:OutputStream,Writer
按读取的单元:
字节流:InputStream,OutputStream
字符流:Reader,Writer
基本的有6类,输入流、输出流、字节流、字符流、节点流,处理流
2、读文件的流程
把文件装入输入流中,
从流中读取数据
转成字符串
关闭输入流
3、写文件的流程
把目标文件装入输出流
把数据(字符串)转为byte数组
写入流中
关闭输出流
4、io流的读写过程中可能的异常时什么?
不管是读写文件,目录、文件找不到都是FileNotFoundException
IO流就会出现IO异常,IOException
课堂笔记:
流的分类:
普通流分类:
流向:
读取数据单元:
转换流:InputStreamReader,OutputStreamWriter
高级流:高级流不能直接作用于文件,要通过装载普通流/转换流
缓冲流:BufferedReader BufferedWriter
缓冲区一般来说是有127个字节,
如果一行结束还没到127个那就到这一行位置,按照换行符来分隔\r\n
二进制流:
对象流:
写对象:
1、要求对象的类型必须是可序列化类型(实现了Serializable接口)
2、现有写入的目标流
3、创建对象流,把输出流装入
4、调用对象流的writeObject()方法,把对象装入
5、关闭资源
读对象:
1、现有输入的源文件流
2、创建对象输入流,装入文件输入流
3、调用对象流的readObject()方法,读取到对象
4、关闭资源
TestReader:
package cn.kgc.kb09;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/8/4 14:16
* @Description:
**/
public class TestReader {
public static void main(String[] args) throws IOException {
File file = new File("D:/KB09/a.txt");
FileReader fr=new FileReader(file);
char[] c=new char[(int)file.length()];
fr.read(c);
System.out.println(c);
fr.close();
String s=readFile("D:/KB09/a.txt");
System.out.println(s);
}
private static String readFile(String path) {
File file =new File(path);
FileReader fr=null;
String str=null;
try {
fr=new FileReader(path);
char[] c= new char[(int)file.length()];
fr.read(c);
str=new String(c);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}
}
TestBuffer:
package cn.kgc.kb09;
import java.io.*;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/8/4 14:45
* @Description:
**/
public class TestBuffer {
public static void main(String[] args) {
String s = readBuffer("a.txt");
System.out.println(s);
String str="您好,我的名字是{name},我是一只{type},我的主人是{master}";
StringBuffer sb=new StringBuffer(str) ;
TestBufferedWriter.writeBuffer("替换前:"+sb,"pet.txt",false);
sb.replace(sb.indexOf("{"),sb.indexOf("}")+1,"欧欧");
sb.replace(sb.indexOf("{"),sb.indexOf("}")+1,"狗狗");
sb.replace(sb.indexOf("{"),sb.indexOf("}")+1,"李伟");
TestBufferedWriter.writeBuffer("\r\n替换后:"+sb,"pet.txt",true);
}
public static String readBuffer(String path){
File f = new File(path);
FileReader fr= null;
String str=null;
StringBuffer sb=new StringBuffer();
BufferedReader br=null;
try {
fr = new FileReader(f);
br=new BufferedReader(fr);
String s;
while ((s=br.readLine())!=null){
sb.append(s+"\r\n");
}
str=sb.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}
}
TestWriter:
package cn.kgc.kb09;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/8/4 14:23
* @Description:
**/
public class TestWriter {
public static void main(String[] args) {
String str="体验服8月5日维护详情\n" +
"\n" +
"亲爱的阴阳师大人:\n" +
"\n" +
"为了给大家带来更好的游戏体验,抢先体验服、安卓体验服的服务器将于8月5日(周三)早上7:30-9:00进行停服维护,如未能按时完成,则开服时间将会顺延。具体更新详情请留意稍后更新公告,或维护结束后至游戏登录界面查看。\n" +
"\n" +
"维护期间将暂时无法进入服务器进行游戏,给各位带来的不便,敬请谅解,非常感谢大家的支持和理解!(鞠躬)\n" +
"\n" +
"温馨提示:体验服更新的测试内容、节奏与正式服更新的外放内容、节奏将不完全等同,我们希望持续提供优质内容,并通过测试不断优化游戏体验,感谢大人们的关注。\n" +
"\n" +
"重要更新\n" +
"\n" +
"1.'为崽而战·炎夏之舞'活动开启!\n" +
"\n" +
"酷暑时分,百鬼于平安京街头摩拳擦掌。阳光灿烂的夏日令人燃起斗志,阴阳师大人,与心爱的崽崽在战场起舞的时刻再次来临了!\n" +
"\n" +
"本期调整内容:\n" +
"\n" +
"(1)“百妖之巅”迭代,将采用突变战斗的形式,每日挑战“非突变”对应斗技首胜奖励,挑战“任一突变”对应斗技三胜奖励。\n" +
"\n" +
"(2)优胜式神奖励,'应援对决'阶段结束后,最终排名前三名的式神为了答谢各位阴阳师大人们的支持,在接下来的一段时间里,他们会出现在游戏内的部分战斗中,阴阳师大人们可以主动寻求他们的援助。优胜式神援助系统预计将在'为崽而战'活动结束后的两个月内上线。\n" +
"\n" +
"(3)应援寮“大数据”,每个式神应援寮都有独特的五道问题,阴阳师大人们可根据自身情况作答。答题完毕后,可随时查看结果。赶快分享数据,让其他大人们看看您所应援的式神寮是什么“属性”吧~\n" +
"\n" +
"(4)观战应援与斗技的观战应援操作方式保持一致,在翻牌阶段可以应援,战斗开始后将无法应援。\n" +
"\n" +
"*玩法规则简介:\n" +
"\n" +
"应援集结阶段:8月7日20:00 - 8月12日12:00\n" +
"\n" +
"阶段说明:\n" +
"\n" +
"(1)阴阳师大人们选择自己想要应援的式神,并加入其应援寮。\n" +
"\n" +
"(2)8月8日20:00前,只能加入自己已收集的式神的应援寮。之后,可以加入任何式神的应援寮。\n" +
"\n" +
"(3)联动角色、N阶式神、SP阶式神不参与为崽而战活动。\n" +
"\n" +
"全民应援阶段:8月12日12:00 - 8月21日\n" +
"\n" +
"阶段说明:\n" +
"\n" +
"(1)大人们在为崽而战斗技中获胜,可增加积分和获得式神勋章。若不幸战败,将会减少积分,但不扣除式神勋章。连胜会让大人们获得更多的式神勋章。\n" +
"\n" +
"(2)'寝肥合战'、'百妖之“巅”'、'名仕邀请赛'玩法也在本阶段开启,参与玩法可获得包含式神勋章在内的丰厚奖励。\n" +
"\n" +
"(3)积分的多少决定大人们的段位。式神勋章的多少会影响大人们在寮内的排名。\n" +
"\n" +
"(4)式神勋章的获得也使该寮的总勋章数增加,提升寮的排名。\n" +
"\n" +
"(5)本阶段结束时,获得了中级或高级应援挂件的阴阳师大人,可获得为崽而战·炎夏之舞专属皮肤:日和坊·忆日春葵。\n" +
"\n" +
"(6)本阶段斗技积分达到3300分的阴阳师大人们的战斗将采用禁选战斗模式。\n" +
"\n" +
"应援对决阶段:8月22日 - 8月23日\n" +
"\n" +
"规则说明:\n" +
"\n" +
"(1)在上一阶段中,所有式神应援寮内积分排名前100的阴阳师大人将进入本阶段的比赛。\n" +
"\n" +
"(2)本阶段比赛中所有阴阳师大人自由匹配,匹配纯随机。\n" +
"\n" +
"(3)所有应援寮前100的阴阳师大人经过一场激烈大战后,将会根据大人们在本阶段为各自寮争取到的总勋章数量来对所有的应援寮进行寮间勋章榜排名。\n" +
"\n" +
"(4)该阶段活动结束时,将对大人们的段位、寮内排名以及所在应援寮的排名进行结算,分发奖励。\n" +
"\n" +
"(5)本阶段的所有战斗都将采用禁选战斗模式。\n" +
"\n" +
"*从8月10日起'斗技'玩法将会暂不开启,并于8月24日起恢复正常。\n" +
"\n" +
"*还有更多玩法的规则详情描述,可以在游戏内,为崽而战的应援寮主界面中找到。\n" +
"\n" +
"*请各位阴阳师大人为自己心爱的崽儿们战斗吧!\n" +
"\n" +
"2.秘境召唤·特别版开启\n" +
"\n" +
"*开启时间:8月5日10:00-8月16日23:59\n" +
"\n" +
"*本期秘境召唤规则相对往期有所调整,花费勾玉或魂玉购买秘境召唤符,之后使用秘境召唤符和勾玉即可创建或参与本次召唤队伍。\n" +
"\n" +
"*本期包含的最新式神将更新至SP浮世青行灯。\n" +
"\n" +
"*具体规则和式神分组请于活动开启后在游戏内查看。\n" +
"\n" +
"3.花合战·叶月上线!\n" +
"\n" +
"*活动时间:8月5日维护后-9月9日维护前\n" +
"\n" +
"*活动期间,阴阳师大人们可以通过完成各式各样的任务来获得花札经验,从而提高自己的花札等级。\n" +
"\n" +
"*随着花札等级的提升,阴阳师大人们可以获得大量丰厚的奖励。\n" +
"\n" +
"*购买墨染花札,更可解锁白藏主皮肤·狐影白狩等超值奖励!\n" +
"\n" +
"4.活动——时运,周末御魂自选!\n" +
"\n" +
"*活动时间:8月8日0:00-8月9日23:59\n" +
"\n" +
"*活动期间的周六、周日,'八岐大蛇'副本的御魂掉落种类可以自由选择。\n" +
"\n" +
"*每个加成效果的御魂中只能选择1种,共可选择4种御魂。\n" +
"\n" +
"*每天可享受120次时运效果,次数用尽后恢复常规掉落。\n" +
"\n" +
"*御魂种类在每天选定后,可以多次更改。\n" +
"\n" +
"5.新礼包情报\n" +
"\n" +
"*暑期伴手礼\n" +
"\n" +
"售价:6魂玉\n" +
"\n" +
"购买后获得:勾玉×30,体力×100,金币×20000\n" +
"\n" +
"限购时间:8月6日0:00-8月17日23:59每日限购1次\n" +
"\n" +
"*暑期纪念礼\n" +
"\n" +
"售价:30魂玉\n" +
"\n" +
"购买后获得:夏之逸趣动态头像框,神秘的符咒×3,金币×50000\n" +
"\n" +
"限购时间:8月6日0:00-8月17日23:59限购1次\n" +
"\n" +
"*暑期特别礼\n" +
"\n" +
"售价:68魂玉\n" +
"\n" +
"购买后获得:五星奉为达摩×1,四星奉为达摩×1,奉为达摩×3,金币×100000\n" +
"\n" +
"限购时间:8月6日0:00-8月17日23:59限购1次\n" +
"\n" +
"*杂货铺商品\n" +
"\n" +
"宫之礼、商之礼、角之礼、徵之礼、羽之礼5个礼包,购买后可分别获得一枚两件套属性为暴击、攻击加成、防御加成、生命加成、效果命中/效果抵抗的六星御魂,均售价28勾玉,8月5日维护后-8月11日23:59每个礼包每日限购一次。\n" +
"\n" +
"6.第三届'百绘罗衣·式神皮肤设计大赛'投稿阶段正式开启!\n" +
"\n" +
"*投稿时间:8月5日维护后-9月9日23:59。\n" +
"\n" +
"*活动期间,前往三大平台'阴阳师游戏客户端/同人社区'、'LOFTER'、'画珈',在活动页面上传参赛作品,作品审核通过即视为参赛成功。客户端活动界面可在'地藏像'-'百绘罗衣'进入。\n" +
"\n" +
"7.第三届'大触觉醒'创作大赛征稿正式开启!\n" +
"\n" +
"*活动开始时间:8月5日维护后(各赛事结束时间不同,详情请前往阴阳师官网查阅)。\n" +
"\n" +
"*本届大赛设置了'百绘罗衣·式神皮肤设计大赛'、'集绘千卷·漫画创作大赛'、'礼乐和鸣·音乐大赛'、'平安映画·视频大赛'、'和乐绮舞·舞蹈大赛'、'绮妆魅服·Cosplay平面大赛'、'珠光琅华·首饰设计大赛'七大赛事。大赛邀请了日本动画监督几原邦彦、马来西亚概念插画师ZeenChin、日本舞见银发娘miume、国内音乐唱作人戴荃还有神秘嘉宾评委一起来参与评审!优胜者可以获得万元奖金、2020年大触觉醒限定动态头像框、周边礼包等!期待大人们的作品!\n" +
"\n" +
"*阴阳师大人可前往'地藏像'-'大触觉醒'或前往阴阳师官网查看详细活动。\n" +
"\n" +
"8.夏令营主题周边新品首发\n" +
"\n" +
"*8月5日0:00-8月13日23:59,阴阳师夏令营主题周边新品首发活动开启!\n" +
"\n" +
"*主题盒蛋、换装玩偶、毛绒团子、挂件配饰及文创系列周边上架,欢迎大人们一同与花样崽崽们收获夏天美好回忆~\n" +
"\n" +
"9.'心易'周边上新!\n" +
"\n" +
"*'心易兑换'新周边上架,8月5日10:00正式开启。数量有限,欲换从速!\n" +
"\n" +
"*已成为'心易用户'的阴阳师大人可以在'心易徽记'-'心易兑换'中消耗助力值兑换。";
writeFile(str,"a.txt",false);
}
public static void writeFile(String str,String path,boolean isAppend){
File f = new File(path);
//char[] c = str.toCharArray();
FileWriter fw=null;
try {
fw=new FileWriter(f,isAppend);
fw.write(str);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
TestBufferedWriter:
package cn.kgc.kb09;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/8/4 14:58
* @Description:
**/
public class TestBufferedWriter {
public static void main(String[] args) {
writeBuffer(
"流的分类:\n" +
"\t普通流分类:\n" +
"\t\t流向:\n" +
"\t\t读取数据单元:\n" +
"\t转换流:InputStreamReader,OutputStreamWriter\n" +
"\t高级流:高级流不能直接作用于文件,要通过装载普通流/转换流\n" +
"\t\t缓冲流:BufferedReader BufferedWriter\n" +
"\t\t缓冲区一般来说是有127个字节,\n" +
"\t\t如果一行结束还没到127个那就到这一行位置,按照换行符来分隔\\r\\n\n" +
"\t\t二进制流:\n" +
"\t\t对象流:"
,"abc.txt",false);
}
public static void writeBuffer(String str,String path,boolean isAppend){
File f=new File(path);
FileWriter fw = null;
BufferedWriter bw=null;
try {
fw= new FileWriter(f,isAppend);
bw= new BufferedWriter(fw);
bw.write(str);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
TestStreamReader:
package cn.kgc.kb09;
import java.io.*;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/8/4 14:16
* @Description:
**/
public class TestStreamReader {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("e:/HelloWorld.txt");
//"GB2312"字符编码集
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
char []c=new char[fis.available()];
isr.read(c);
System.out.println(c);
}
}
TestData:
package cn.kgc.kb09;
import java.io.*;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/8/4 16:07
* @Description:
**/
public class TestData {
public static void main(String[] args) throws IOException {
/* FileInputStream fis = new FileInputStream("C:/Users/56504/Desktop/1.jpg");
DataInputStream dis=new DataInputStream(fis);
byte[] b=new byte[fis.available()];
dis.read(b);
String s=new String(b);
System.out.println(s);
FileOutputStream fos=new FileOutputStream("jk.jpg");
DataOutputStream dos=new DataOutputStream(fos);
dos.write(b);
dos.close();
fos.close();
dis.close();*/
copyData("C:/Users/56504/Desktop/1.jpg","2.jpg");
}
public static void copyData(String fromPath,String targetPath){
FileInputStream fis=null;
DataInputStream dis=null;
FileOutputStream fos=null;
DataOutputStream dos=null;
try {
fis=new FileInputStream(fromPath);
dis=new DataInputStream(fis);
fos=new FileOutputStream(targetPath);
dos=new DataOutputStream(fos);
int tmp;
while((tmp=fis.read())!=-1){
dos.write(tmp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}