I/O总结笔记

I/O总结

File类

File f1=new File("yang.txt");
File f2=new File("src\\mr\\yang.txt");
File f3=new File("C:\\Destk\\yang.txt");

File f4=new File("C:\\Destk\\","yang.txt");

File my=new File("C:\\Destk\\","yang.txt");
File f5=new File(my,"yang.txt");

使用:

f1.getAbsolutePath();//获得绝对路径
f1.getName();//输出文件名
f1.isHidden();//是否隐藏文件
f1.length();//输出文件大小,单位字节
f1.lastModified();//最后修改时间

补充:

Date date=new Date(f1.lastModified());
输出date就是最后显示时间
    
//或使用自定义的SimpledateFormat
Date date=new Date(f1.lastModified());
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
输出sdf.format(date)就是最后显示时间   
f1.exists();//文件是否存在
f1.delete();//文件是否删除成功,返回类型是boolean
f1.createNameFiel();//创建新空文件,返回类型是boolean,false创建失败

File类文件夹

File dir new File("文件夹名");
Boolean flag=dir.mkdir();


//多层文件夹
File dir new File("dir/dir2/dir3");
Boolean flag=dir.mkdir();


//删除文件夹
Boolean del=dir.delete();


//获取所有子文件返回数组
File dir new File("C:\\desck\\");//文件地址
File files=f.listFiles();//使用listFiles返回文件及其子文件夹
for(File tmp:files){
    if(tmp.isFile()){//判断是否为文件
        是文件
    }else if(tmp.isDirectory()){
        是文件夹
    }
} 

注意:以下都省略了对象创建、try以及关闭流的过程 ,纯属个人使用总结,如有问题欢迎提出

1.文件字节流—容易出现乱码

FileOutputStream

out=new FileOutputStream(f1,true);//true在文件末尾追加内容,false替换文件内容

String str=“1234564”;
byte b[]=str.getBytes();//字符串转化为字节数组
out.write(b);//将字节写入到文件

FileInputStream

in=new FileInputStream(文件);

byte b2[]=new byte[200];//读缓冲区
int len=in.read(b2);
System.out.println(new String(b2,0,len));//文件里数据去空格输出

2.文件字符流–不易乱码–不需要缓冲区

FileWriter文件字符输入流–写

fw=new FileWriter(f1);
String str=“我是测试!”;
fw.write(str);

FileReader文件输出流–读

fr=new FileReader(f1);

char ch[]=new char[1024];//注意缓冲区是char类型的
int count;//已经读出的字符数
while((count=fr.read(ch))!=-1){//不等-1即读完了
System.out.println(new String(ch,0,count));
}

3.缓冲字节流

提高运行效率,即使用文件字节流不再使用原来的缓冲区

BufferedOutputStream

out=new FileOutputStream(f1,true);
bo=new BufferedOutputStream(out);//放入

String str=“我是测试4654”;
byte b[]=str.getBytes();

//过去直接使用out.write(b);现在我们使用BufferedOutputStream,根据情况使用flush
bo.write(b);
bo.flush();//刷新,强制将缓冲区数据写入文件,即使没有写满

BufferedInputStream

in=new FileInputStream(f1);
bi=new BufferedInputStream(in);//放入

byte b[]=new byte[1024];

while(bi.read(b)!=-1){
//使用缓冲区读取到的数据
System.out.println(new String(b));
}

4.缓冲字符流–以行单位输入/输出

BufferedWriter写

fw=new FileWriter(f1);
bw=new BufferedWriter(fw);//将写入流包装成缓冲字符流
String str1=“我是再见!”;
String str2=“我是你好!”;

bw.write(str1);
bw.newLine();//创建新一行
bw.write(str2);

BufferedReader读

FileReader fw=null;//注意使用到FileReader
BufferedReader br=null;//使用
try{
fw=new FileReader(f1);
br=new BufferedReader(fw);

String tmp=null;
int i=1;//计数器
while((tmp=br.readLine())!=null){//读完条件
System.out.println(i+“行”+tmp);
i++;
}
}

5.数据流

DataOutputStream数据输出流

out=new FileOutputStream(f1,true);
dos=new DataOutputStream(out);

dos.writeUTF(“写入的字符串”);//可以写入各种类型的数据
dos.writeInt(132);
//dos.writeDouble(3.14);//最好不要挨着写 1233.14会认不出
dos.writeBoolean(true);
dos.writeDouble(3.14);

DataInputStream数据输入流

in=new FileInputStream(f1);
dos=new DataInputStream(in);

//dos.readByte();读字节型
System.out.println(dos.readChar());
System.out.println(dos.readInt());
System.out.println(dos.readBoolean());
System.out.println(dos.readFloat());

6.字符流转为字节流

字节流不可以转字符流

字符流转字节流 OutputStreamReader写

File f1=new File(“C:\Users\Administrator\Desktop\Test\Test.txt”);
FileOutputStream fos=null;
OutputStreamWriter osw=null;//字符流转化为字节流

BufferedWriter bw=null;
try{
fos=new FileOutputStream(f1);
osw=new OutputStreamWriter(fos,“UTF-8”);//按指定格式写入字符集
bw=new BufferedWriter(osw);
bw.write(“加油啊~”);
}

字符流转字节流 InputStreamReader读

FileInputStream fis=null;
InputStreamReader isw=null;//字符流转化为字节流

BufferedReader br=null;
try{
fis=new FileInputStream(f1);
isw=new InputStreamReader(fis,“UTF-8”);//按指定格式写入字符集
br=new BufferedReader(isw);

​ System.out.println(br.readLine());
}

7.流的两种关闭方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zk6IBExl-1615300551822)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210309223042876.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值