javaday15-IO(整理和训练)

一.File类的常用方法

—–File:(java.on.File)
—–构造函数(/或者\)三种构造方法
——- File(“”);//文件路径
File(File f,”“);//(父文件路径的对象,子文件名称)
File(“”,”“);//(父文件的路径名,子文件名)

        File f=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace");//构造方法一
//      f=new File(f,"a.txt");//构造方法二
        f=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace","a.txt");
        System.out.println(f);

常用方法:
getName();//获取文件名字(返回的是String)
getParent();//获取文件的父目录(返回的是String)
isFile();//判断是否是文件(返回的是boolean)
isDirectory();//判断是否是目录(返回的是boolean)
createNewFile();//创建不存在的文件(创建不存在的新文件,若已经存在,返回false)
list();//当前目录下的所有文件名(此处返回的是:a.txt”不包含父目录”)
listFile();//获取当前目录下的所有文件对象(//此处返回的是:F:\Test\a.txt(包含父目录))
mkdir();//创建目录
mkdirs();//创建不存在的目录 父目录
两者的区别在于(mkdirs可以创建父目录不存在的情况,而mkdir创建的时候父目录必须提前存在,否则会出现创建失败)
————————————–
canRead(返回的是boolean)
canWrite(返回的是boolean)
delete//删除文件(返回的是boolean类型)
getAbsolutePath():由相对路径求绝对路径(返回的是绝对路径(返回的是String的形式))
getAbsoluteFile():(返回的是绝对路径(返回的是File的形式))
getParent:(获取父目录,返回的是String)
getParentFile:(获取父目录,返回的是File对象)
File: 和文件有关,但是和数据没关
绝对路径(盘符D:)和相对路径
*exercise

package day15;

import java.io.File;
import java.io.IOException;

public class File_Test {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File f=new File("F:/Test");//构造方法一
        f=new File(f,"a.txt");//构造方法二
//      f=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace","a.txt");
        System.out.println(f);
        System.out.println(f.isFile());
        System.out.println(f.isDirectory());
        System.out.println(f.getName());
        System.out.println(f.getParent());
        System.out.println(f.canRead());
        System.out.println(f.canWrite());//boolean
//      System.out.println(f.createNewFile());//创建不存在的新文件,若已经存在,返回false
        //f=new File("src/day15/day15.txt");
        System.out.println(f.getAbsolutePath());//返回的是绝对路径(返回的是String的形式)
        System.out.println(f.getAbsoluteFile());//返回的是绝对路径(返回的是File的形式)
        f=new File("F:/Test/a.txt");
        System.out.println(f.getParentFile());//获取父目录
        System.out.println(f.getParent());
//      System.out.println(f.delete());返回的是boolean类型
        /*f=new File("F:/Test");
        String []aString=f.list();//返回的是一个数组
        for (String str : aString) {
            System.out.println(str);//此处返回的是:a.txt
        }
        File[] aFile=f.listFiles();//返回一个数组对象
        for (File file : aFile) {
            System.out.println(file);//此处返回的是:F:\Test\a.txt(包含父目录)
        }*/
        f = new File("F:/Test/a");
        // System.out.println(f.mkdir());//创建文件夹
         System.out.println(f.mkdirs());
    }

}

练习:(获取指定文件的所有.java文件)

package day15;

import java.io.File;

public class FileIO_Test {

    public static void main(String[] args) {
        File file=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace");
        filename(file);
    }
    public static void filename(File file){
        File[] aFiles=file.listFiles();
        for(File a:aFiles)
        {
            if(a.isFile())
            {
                if(a.getName().endsWith(".java"))
                System.out.println(file);
            }
            if(a.isDirectory())
            {
                filename(a);
            }
        }
    }
}

二.IO流
大纲

IO流体系:


        I:Input   输入
        O:outPut  输出
        流:Stream

IO流
        分
            字节流:通过字节读取和写入(图片 视频 音频 .docx)
                    基类:
                        InputStream   
                        OutputStream
                    实现类
                        FileInputStream
                            int read();
                            返回int:字节   -1:文件末尾
                            int read(byte[] buf)
                            int read(byte[] buf,int start,int len)
                            返回的int:读取的字节个数,-1:文件末尾
                        FileOutputStream
                            write(int c)
                            write(byte[] buf);
                            write(byte[] buf ,int start, int len)

                        close();-----》关闭资源
                    输入,输出:相对于内存 
            字符流:通过字符读取和写入(纯文本.txt)

1.输入流
字节流三种方法的读取

read():返回的abstract int
read(byte [] b):返回的是int
read(byte [] b,int off,int len):返回的是int

exercise:

/**
     * 读取指定文件中的内容
     * @param f
     * @throws IOException 
     */
    private static void testRead(File f) throws IOException {
        //1.通道流
        InputStream in = new FileInputStream(f);

        //2.读取
        /*int num = in.read();
        while(num!=-1){
            //如果不等于-1表示没有到文件结束
            System.out.print((char)num);
            //继续读取下一个
            num = in.read();
        }*/

        byte [] buf = new byte[1028];//缓冲字节数组的好处:读取的速度变快
        int num  ;
        while((num = in.read(buf))!=-1){
            System.out.print(new String(buf, 0, num));
        }

        /*byte [] buf = new byte[10];
        int num = in.read(buf,0, buf.length);
        while(num!=-1){
            System.out.println(new String(buf, 0, num));
            num = in.read(buf,0, buf.length);
        }*/
        //3.资源使用结束,关闭资源
        in.close();
    }

2.输出流

    private static void testWrite(File f) throws IOException {

        //1.通道流
        OutputStream os = new FileOutputStream(f);

        //2.不断写入
        /*os.write('a');
        os.write('f');*/

        /*String str = "你好!";
        os.write(str.getBytes());*/

        byte [] buf = "你好!欢迎写入数据".getBytes();//string转bytes
        os.write(buf, 0, buf.length);

        //3.关闭通道

        os.close();
    }

3.文件的copy(视频音频文本文件)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteTest {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File file=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace/A.txt");
        FileInputStream in=new FileInputStream(file);
        FileOutputStream out=new FileOutputStream("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace/B.txt");
        copy(in,out);
        in.close();
        out.close();
    }
    public static void copy(FileInputStream f1,FileOutputStream f2) throws IOException
    {
        byte []a=new byte[1024];
        int num;
        while((num=f1.read(a))!=-1)
        {
            f2.write(a);
        }
    }

三.周末考试练习题
这里写图片描述
方法一:

package day14_02;

import java.util.Scanner;

public class Second_HomeWork {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        System.out.println("欢迎使用Mimi转换器");
        boolean flag=true;
        while(flag){
        System.out.println("请输入天气状况的第一个英文字母:");
        String numabc=sc.next();
                if("D".equals(numabc))
                {
                    System.out.println("干燥");

                }
                else if("M".equals(numabc))
                {
                    System.out.println("潮湿");
                }
                else if("H".equals(numabc)){System.out.println("炎热");
                }
                else if("R".equals(numabc)){System.out.println("下雨");
                }
                else{

                    System.out.println("输入错误,无法转换");
                }
            System.out.println("你想继续吗?y/n");
            String str=sc.next();
            if(str=="n")
            {
                flag=false;
            }
            else if(str=="y")
            {
                return;
            }
            }
        }

        }

方法二:使用hashmap

package day14_02;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

public class Test3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        boolean flag=true;
        while(flag)
        {
            System.out.println("请输入天气状况的第一个字母:");
            String aString=sc.next();
            jixu(aString);
            System.out.println("请输入是否继续(y/n)");
            String num=sc.next();
            if("y".equals(num))
            {
            }
            else if("n".equals(num))
            {
                System.out.println("退出系统");
                flag=false;
            }else{
                System.out.println("输入错误:只能输入y/n,程序结束!");
                flag=false;
            }
        }
    }
    public static void jixu(String str)
    {
        HashMap<String, String> ahHashMap=new HashMap<>();
        ahHashMap.put("H", "炎热");
        ahHashMap.put("D", "干燥");
        ahHashMap.put("M", "潮湿");
        ahHashMap.put("R", "下雨");
        Set set=ahHashMap.keySet();
        Iterator a=set.iterator();
        while(a.hasNext()){
            Object key=a.next();
            String value=ahHashMap.get(key);
            if(str.equals(key))
            {
            System.out.println(value);
            return;
            }
        }
        System.out.println("输入错误,无法转换");
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值