Java基础IO流

File类概述和构造方法

private static void method1()
{
 String path="C:\\itdemoe\\a.txt";
 File file=new File(path);
}
private static void method2()
{
String path1="C:\\itdemoe";
String path2="a.txt";
File file=new File(path1,path2);
sout(file);
}

private static void method3()
{
  File file1=new File("C:\\itdemoe");
  String path="a.txt";
  File file=new File(file1,path);
  sout(file);
}

绝对路径和相对路径 

//创建一个新的空的文件  createNewFile();
File file1=new File("C:\\itDemo\\aaa");
boolean result1=file1.createNewFile();
sout(result);

File file=new File("C:\\itDemo\\aa.txt");
boolean result=file.mkdir();
File类删除功能

 

File类判断和获取功能 

 

File file=new File("C:\\ithDemo\\a.txt");
boolean result1=file.isFile();
boolean result2=file.isDirectory();

File file =new File("a.txt");
boolean result=file.exists();
sout(result);

 File类高级获取功能

File file=new File("filemodule\\aaa");
if(!file.exists())
{
   file.mkdirs();
}
File newFile=new File(file,"a.txt");
newDile.createNewFile();//注意:文件所在的文件夹必须存在

private static void deleteDir(File src){
//先删掉这个文件夹里面所有的内容
//递归 方法在方法体中自己调用自己
//注意:可以解决所有文件夹和递归相结合的题
//1.进入---得到src文件夹里面所有内容的File对象
File[] files=src.listFiles();
//遍历--得到src文件夹里面每一个文件和文件夹的File对象
for(File file:files)
{
    if(file.isFile())
//判断--如果遍历到的File对象是一个文件,那么直接删除
    {
       file.delete(); 
    }else
    {//判断
     //递归
     deleteDir(file);//参数一定要是src文件夹里面的文件夹File对象
    }
}
//最后在删除这个文件夹
src.delete();
}
 练习

private static void getCount(HashMap<String,Integer>hm,File file)
{
   File[] file=file.listFiles();
   for(File f:files){
     if(f.isFile()){
       String fileName=f.getName();
       String [] fileNameArr=fileName.split("\\.");
       if(fileNameArr.length==2){
        String fileEndName=fileNameArr[1];
        if(hm.containsKey(fileEndName)){
           //已经存在
           //将已经出现的次数获取出来
           Integer count =hm.get(fileEndName);
           //这种文件又出现了一次
           count++;
           //把已经出现的次数给覆盖掉
           hm.put(fileEndName,count);
          }
          else{
            //不存在
            //表示当前文件是第一次出现
            hm.put(fileEndName,1);
         } 
       }
     }else{
        getCount(hm,f);
     }
   }
}

IO 流概述和分类

 I表示intput,是数据从硬盘进内存的过程,称之为读

O表示output,是数据从内存到硬盘的过程,称之为写

IO的数据传输,可以看做是一种数据的流动,按照流动的方向,以内存为参照物,进行读写操作

简单来说:内存在读,内存在写

 

用windows记事本打开能读的懂 ,那么这样的文件就是纯文本文件

//创建字节输出流的对象---告诉虚拟机我要往哪个文件中写数据了
FileOutputStream fos=new FileOutputStream("D:\\a.txt");
//FileOutputStream fos=new FileOutputStream(new File("D:\\a.txt"));
fos.write(97);
fos.close();
}

字节流写数据 

FileOutputStream fos=new FileOutputStream("bytestream\\a.txt");
byte [] bys={82,34,56,78,9,00,45};
fos.write(bys,1,2);
fos.close();

 字节流写完数据后,加换行符

\r\n

FileOutputStream  fos=new FileOutputStream("bytes\\a.txt");
fos.write(97);
fos.write("\r\n".getBytes());
fos.write(98);
fos.write("\r\n".getBytes());

 

 

 字节流写数据如何实现追加写入呢?

public FileOutputStream(String name,boolean append)

创建文件输出流以指定的名称写入文件,如果第二个参数为true,不会清空文件里的内容

try{
 FileOutputStream fos= new FileOutputStream("a.txt");
 fos.write(98);
}catch(IOException e)
{
 e.printStackTrace();
}finally
{
 if(fos!=null)
{
   try{
   fos.close();
   }catch(IOException e){
       e.printStackTrace();
}}}

 字节流读数据

一次读一个字节

//如果文件不存在,那么就不会报错
FileInputStream fis=new FileInputSteam("bytestream\\a.txt");
int read=fis read();
//一次读取一个字节,返回值就是本次读到的那个字节数据
//也就是字符在码表中对应的那个数字
//如果我们想要看到的是字符数据,那么一定要强转成char
sout((char)read);
fis.close();
 读取文件多个字节代码
FileInputStream fis=new FileInputSteam("bytestream\\a.txt");
//文件中多个字节
int b;
while((b=fis.read())!=-1)
{
    sout((char)b);
}
fis.close();
复制文件 

FileInputStream fis=new FileInputStream("C:\\itheima\\a.avi");
FileOutputStream fos=new FileOutputStream("bytestream\\a.avi");
int b;
while((b=fis.read())!=-1)
{
  fos.write(b);
}
fis.close();
fos.close();

字节流操作的文件过大,那么速度

 提高拷贝速度的解决办法

 

FileInputStream fis =new FileInputStream("C:\\itheima\\a.avi");
FileOutputStream fos=new FileOutputStream("bytestream\\a.avi");
byte[] bytes=new byte[1024];
int len;//本次读到的有效字节个数--这次读几个字节
while(len=fis.read(bytes))!=-1)
{
  fos.write(bytes,0,len);
}
fis.close();
fos.close();

 

 字节缓冲流

 BufferOutputStream:字节缓冲输出流

BufferedInputStream:字节缓冲输入流

构造方法:

字节缓冲输出流:BufferedOutputStream(OutputStream out)

字节缓冲输入流:BufferedInputStream(InputStream in)

为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?

 字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作

 

 

//利用缓冲流去拷贝文件
//创建一个字节缓冲输入流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("bytestream\\a.txt"));
//创建一个字节缓冲输出流
BufferedOutputStream b0s=new BufferedOutputStream(newFileOutputStream("bytestrm\\b.txt"));
int b;
while((b=bis.read())!=-1)
{
   bos.write(b);
}
bis.close();
bos.close();
//利用缓冲流去拷贝文件
//创建一个字节缓冲输入流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("bytestream\\a.txt"));
//创建一个字节缓冲输出流
BufferedOutputStream b0s=new BufferedOutputStream(newFileOutputStream("bytestrm\\b.txt"));
byte [] bytes=new byte[1024];
int len;
while((len=bis.read(bytes))!=-1)
{
   bos.write(bytes,0,len);
}
bis.close();
bos.close();

字符流

 

 特殊操作流

properties

 

Properties prop=new Properties();
//增
prop.put("小龙女","杨过");
prop.put("郭靖","黄蓉");
sout(prop);
//删
prop.remove("郭靖");
sout(prop);
//改
//put---如果键不存在,那么就添加,如果键存在,那么就覆盖
prop.put("郭襄","杨过");
sout(prop);
//查
Object values=prop.get("郭靖");
sout(values);
//遍历
Set<Object>keys=prop.keySet();
for(Object key:keys)
{
  Object value=prop.get(key);
  sout(key+"="+value);
}
//装的是所有的键值对对象
Set<Map.Entry<Object,Object>> entries=prop.entrySet();
for(Map.Entry<Object,object> entry:entries){
  Object key = entry.getkey();
  Object value = entry.getValue();
  sout(key+"="+value);
}
 Properties作为集合的特有方法:

 

Properties prop=new Properties();
prop.setProperty("江苏","南京");
prop.setProperty("浙江","杭州");
prop.setProperty("山东","济南");
sout(prop);

String value=prop.getProperty("江苏");
sout(value);
//从属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
Set<String> keys=prop.stringPropertyNames();
for(String key:keys){
   String value=prop.getProperty(key);
   sout(key+"="+value);
}
 Properties和IO流结合的方法:

 

//读取
Properties prop =new Properties();
FileReader fr=new FileReader("prop.properties");
//调用完了load方法之后,文件中的键值对数据已经在集合中了
prop.load(fr);
fr.close();
sout(prop);

 

 

Properties  prop=new Properties();
prop.put("zhangsan","123");
prop.put("lisi","233");
prop.put("wangwu","421");
FileWriter fw=new FileWriter("prop.properties");
prop.store(fw,null);
fw.close();

 

 

 

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值