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(); } }
浙公网安备 33010602011771号