Java基础复习—输入/输出

一.File类

文件名相关的方法

  • String getName() 返回File对象的文件名
  • String getPath() 返回File对象的相对路径
  • File getAbsoluteFile() 返回File对象的绝对路径
  • String getParent() 返回上一级父类名

文件检测相关的方法

  • boolean exists() 判断File对象所对应的的文件是否存在
  • boolean isAbsolute() 判断File对象是否是绝对路径

文件操作的相关的方法

  • boolean createNewFile() 当对象对应的文件不存在时则创建该文件
  • boolean delete() 删除对象所对应的文件
  • static File createTempFile(String prefix,String suffix, File directory) 给指定目录下创建一个临时的空文件
  • void deleteOnExit() 当虚拟机退出时删除这个文件

目录操作相关的方法

  • String[] list() 列出File对象所有的子文件和路径名
  • static File[] listRoots() 列出系统所有的根路径

如下是一些方法的实现例子;

    public static void main(String[] args) throws IOException {
        //以demo.txt文件创建file对象
        File file = new File("D:\\filedemo\\demo.txt");
        //获得file对象的文件名
        System.out.println(file.getName());
        //获得对象所对应的相对路径路径名
        System.out.println(file.getPath());
        //获得对象的父目录名
        System.out.println(file.getParent());
        //获得对象的绝对路径
        System.out.println(file.getAbsoluteFile());
        //获取上一级路径
        System.out.println(file.getAbsoluteFile().getParent());
        //重命名demo.txt文件夹为test.txt
        System.out.println(file.renameTo(new File("test.txt")));
        //指定在当前路径下创建一个临时文件
        File tmpFile = File.createTempFile("aaa",".txt",file);
        //指定当JVM退出时删除该文件
        tmpFile.deleteOnExit();
        //判断文件是否存在
        System.out.println(tmpFile.exists());
        //以指定的文件名创建新对象
        System.out.println(tmpFile.createNewFile());
        //使用list()方法列出当前路径下所有文件和路径
        String[] fileList = file.list();
        System.out.println("======当前路径下所有文件和路径如下======");
        for (String s:
             fileList) {
            System.out.println(s);
        }
        //使用listRoots()静态方法列出所有的磁盘根路径
        File[] roots = File.listRoots();
        System.out.println("======系统所有的根路径======");
        for (File a:
             roots) {
            System.out.println(a);
        }
    }

二.Java的IO流

Java中 IO流的类 InputStream、Reader、OutputStream、Writer
都是由这四个基类派生的

  1. 输入流输出流:根据数据从内存输入还是输出划分。
  2. 字节流字符流:根据数据单元划分,字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。
  3. 节点流处理流:根据程序是否直接连接到数据源划分;

三.字节流和字符流

字节流和字符流的操作基本相同,只是操作的数据单元不同;

作为输入时的 InputStream 和 Reader

  • int read() 从输入流中读取单个字节或字符;
  • int read(byte[]/char[] b) 从输入流中最多读取b.length() 个字节或字符;
  • int read(byte[]/char[] b, int off ,int len) 指定长度len,从off索引开始读取;

作为输出时的OutputStream 和 Writer

  • int write(int c) 将指定的字节或字符输出到输出流中;
  • int write(byte[]/char[] buf) 将指定数组的数据输出到输出流中
  • int write(byte[]/char[] buf, int off, int len)指定长度len,从iff位置开始输出;
  • void wtire(String s) 将指定字符串输出到输出流中;
  • void write(String s, int off, int len)指定长度len,从off位置开始输出;

使用FileInputStream方法从输入流中读取数据;

public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = new FileInputStream("D:\\filedemo\\demo.txt");
        try{
            byte[] b = new byte[1024];
            int hasread = 0;
            while ((hasread = fileInputStream.read(b)) > 0){
                System.out.println(new String(b,0,hasread));
            }
        }
        catch (IOException ioe){
            ioe.printStackTrace();
        }
        finally {
            fileInputStream.close();
        }
    }

使用FileOutputStream方法从把数据写入输出流;

public static void main(String[] args) throws IOException {
        try (FileInputStream fileInputStream = new FileInputStream("D:\\filedemo\\demo.txt");
             FileOutputStream fileOutputStream = new FileOutputStream("D:\\filedemo\\newdemo.txt")) {
            byte[] b = new byte[1024];
            int hasread = 0;
            while ((hasread = fileInputStream.read(b)) > 0){
                fileOutputStream.write(b,0,hasread);
            }
        }
    }

使用FileWriter方法直接把内容些人输出流;

public static void main(String[] args) throws IOException {
        try (FileWriter fileWriter = new FileWriter("D:\\filedemo\\poem.txt")) {
            fileWriter.write("李白\r\n");
            fileWriter.write("仰天大笑出门去,我辈岂是蓬蒿人\r\n");
            fileWriter.write("金樽清酒斗十千,千金散去还复来\r\n");
        }
    }

四.节点流和处理流

使用InputStreamReader转换类把输入字节转换为输入字符,并且获得键盘输入的功能。 把转换类对象包装进入缓冲流对象,获得缓冲流中的readLine()方法,可以读取一行数据。

public static void main(String[] args) throws IOException {
        try (InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
            String line = null;
            while ((line = bufferedReader.readLine()) != null){
                if (line.equals("exit")){
                    System.exit(1);
                }
                System.out.println("键盘输入的内容为" + line);
            }
        }
    }

五.重定向标准输入/输出

使用重定向把把键盘输入转为从文件中输入;
static void setIn(InputStream in)
使用重定向把标准输出转向文件中
static void setOut(PrintStream out)

public static void main(String[] args) throws IOException {
        try (PrintStream printStream =
          new PrintStream(new FileOutputStream("D:\\filedemo\\newSetdemo.txt"))) {
            System.setOut(printStream);
            System.out.println("成功重定向标准输出");
        }
    }
public static void main(String[] args) throws IOException {
        try (FileInputStream fileInputStream =
                     new FileInputStream("D:\\filedemo\\demo.txt")) {
            //重定向标准输入
            System.setIn(fileInputStream);
            //获取标准输入
            Scanner sc = new Scanner(System.in);
            //增加下面一行只把回车作为分隔符
            sc.useDelimiter("\n");
            //判断是否还有下一项
            while (sc.hasNext()){
                System.out.println(sc.next());
            }
            System.out.println("成功重定向标准输出");
        }
    }

六.NIO.2

1. path方法和paths工具类

//使用指定路径创建path对象
Path path = Paths.get("指定路径");
//获取path的根路径
path.getRoot();
//获取path对应的绝对路径
Path absolutePath = path.toAbsolutePath();
//以多个String来创建Path对象
Path path2 = Paths.get("g:","publish","codes");

2.Files工具类

public static void main(String[] args) throws Exception {
        //复制文件
        Files.copy(Paths.get("D:\\\\filedemo\\\\demo.txt"),
                new FileOutputStream("D:\\filedemo\\ademo.txt"));
        //一次性读取所有行
        List<String> lines = Files.readAllLines(Paths.get("D:\\filedemo\\ademo.txt")
        , Charset.forName("utf-8"));
        System.out.println(lines);
        //判断文件大小
        System.out.println(Files.size(Paths.get("D:\\filedemo\\ademo.txt")));
        //将多个字符串内容写入指定文件中
        List<String> list = new ArrayList<>();
        list.add("将字符串内容");
        list.add("写入指定文件");
        Files.write(Paths.get("D:\\filedemo\\ademo.txt"),list,Charset.forName("utf-8"));
    }

猜你喜欢

转载自blog.csdn.net/weixin_42445650/article/details/89004136