JavaSE-输入输出

Posted on 2021-03-08 17:51  MissRong  阅读(76)  评论(0)    收藏  举报

JavaSE-输入输出

File对象并不能直接对文件内容进行读/写操作,只能查看文件的属性。

File对象可以描述文件夹。

一、File类型提供的常见操作方法:

exists()--判断指定目录下的文件是否存在
如果是相对路径的话,是从src开始的

1、boolean exists() 判断文件是否存在,存在返回true,否则返回false
2、boolean isFile() 判断是否为文件,是文件返回true,否则返回false
3、boolean isDirectory() 判断是否为目录,是目录返回true,否则返回false
4、String getName() 获得文件的名称
5、String getAbsolutePath() 获得文件的绝对路径
6、long length() 获得文件的长度(字节数)

7、列出当前目录下的所有文件的相对路径:
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
8、创建新的文件(该文件应该不存在):
boolean newFile = file.createNewFile();
9、删除文件:
boolean delete = file.delete();

二、I/O流(字节流、字符流)

字节流(一次8位)、字符流(一次16位)

字节流:InputStream(输入流)、OutputStream(输出流)

字符流:Reader(读入流)、Writer(写入流)

 

 

1、OutputStream(输出流-输出到某个文件)

public static void main(String[] args) {
        FileOutputStream fileOutputStream = null;
        try {
            //false是不追加,true是追加(默认是false)
            fileOutputStream = new FileOutputStream("src\\main\\java\\com\\etc\\ioPackage\\etc.txt", false);
            String str = "Welcome to ShenYang";
            fileOutputStream.write(str.getBytes());
            fileOutputStream.close();
            System.out.println("Success");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

可以利用缓冲流提高性能:

public static void main(String[] args) {
        FileOutputStream fileOutputStream = null;
        try {
            //false是不追加,true是追加(默认是false)
            fileOutputStream = new FileOutputStream("src\\main\\java\\com\\etc\\ioPackage\\etc2.txt", false);
            //利用缓冲流提高性能,也可以拓展一些功能
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
            String str = "Welcome to ShenYang";
            bufferedOutputStream.write(str.getBytes());
            bufferedOutputStream.close();
            fileOutputStream.close();
            System.out.println("Success");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2、InputStream(输入流-读取某个文件内容)

 

public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream("src\\main\\java\\com\\etc\\ioPackage\\etc.txt");
            //将所有文件内容输出出来
            int read = 0;
            while ((read = fileInputStream.read()) != -1) {
                //每次只读取一个字节,将得到的ASCII码转换成字符型
                System.out.print((char)read);
            }
fileInputStream.close(); }
catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

 

可以利用缓冲流提高性能:

public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream("src\\main\\java\\com\\etc\\ioPackage\\etc.txt");
            //利用缓冲流提高性能,也可以拓展一些功能
            BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
            int read = 0;
            while ((read = bufferedInputStream.read()) != -1) {
                System.out.print((char)read);
            }
            bufferedInputStream.close();
            fileInputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

练习:

package com.etc.ioPackage;

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

/**
 * @Author : ASUS and xinrong
 * @Version : 2021/3/8 & 1.0
 * 将一个文件的内容整个地复制到另外一个文件中
 */
public class FileInputAndOutputStream {
    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream("src\\main\\java\\com\\etc\\ioPackage\\etc.txt");
            FileOutputStream fileOutputStream = new FileOutputStream("src\\main\\java\\com\\etc\\ioPackage\\etc2.txt", true);
            byte[] buffer = new byte[1024];
            int readNumber = 0;
            while ((readNumber = fileInputStream.read(buffer)) != -1) {
                //每次只写新读入的数据,防止之前写入的数据再次被写入
                fileOutputStream.write(buffer, 0, readNumber);
            }
            fileOutputStream.close();
            fileInputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3、FileWriter

 

public static void main(String[] args) {
        try {
            //true是追加,false是不追加,默认为false
            FileWriter fileWriter = new FileWriter("src\\main\\java\\com\\etc\\ioPackage\\etc.txt", true);
            //利用缓冲流提高性能
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write("Welcome to ShenYang");
            bufferedWriter.close();
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

 

4、FileReader

 

public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader("src\\main\\java\\com\\etc\\ioPackage\\etc.txt");
        //利用缓冲流提高性能
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String str = null;
        while ((str = bufferedReader.readLine()) != null) {
            System.out.print(str);
        }
        bufferedReader.close();
        fileReader.close();
    }

 

5、字节流到字符流的转换

package com.etc.ioPackage;

import java.io.*;

public class SystemInputToReader {
    public static void main(String[] args) throws IOException {
        //将接收的字节流转成字符流
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(inputStreamReader);
        while (true) {
            //输出字符流
            System.out.println(reader.readLine());
        }
    }
}

Scanner:

注:Scanner类位于java.util包中,不在java.io包中,不属于IO流。

练习:

package com.etc.ioPackage;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class User {
    private String name, password;
    public void setName(String name) {
        this.name = name;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public String getPassword() {
        return password;
    }
    public static void main(String[] args) throws IOException {
        User user = new User();
        Scanner scanner = new Scanner(System.in);
        FileWriter fileWriter = null;
        boolean exit = false;
        while (!exit) {
            System.out.println("请输入用户名:");
            user.setName(scanner.next());
            if (user.name.equals("over")) {
                exit = true;
            } else {
                System.out.println("请输入密码:");
                user.setPassword(scanner.next());
                fileWriter = new FileWriter("src\\main\\java\\com\\etc\\ioPackage\\users.txt", true);
                //注意:如果写成:user.name + "," + user.password + "\n" 的话:
                //只会在原来数据的基础上,再追加一行新的数据,且这个数据是最后被输入的信息。
                //因为user的地址不会改变,即使name的值在不断更新,但也只是一遍遍地在原地被覆盖。
                String information = user.getName() + "," + user.getPassword() + "\n";
                fileWriter.write(information);
            }
        }
        fileWriter.close();
        scanner.close();
    }
}

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3