前言:
1.input,把硬盘文件中的数据读入到内存中称为输入,负责读。2.output,把内存中的数据写入到硬盘中称为输出,负责写。
3.IO流:字节流(操作所有类型的文件)、字符流(只能操作纯文本文件)。
1.几个File的API
//绝对路径带盘符 相对路径从当前工程(本文件位置)开始
//通过绝对路径读取 File.separator兼容不同路径
File file = new File("D:" + File.separator + "\\One Drive\\OneDrive\\桌面\\图片get");
//几个重要的文件操作方法
System.out.println(new SimpleDateFormat("时间"+"yyyy-MM-dd HH:mm:ss").format(file.lastModified()));//最后修改文件时间,格式固定
System.out.println(file.getAbsoluteFile());//返回文件的绝对路径
//通过相对路径 /就不用转义,如果使用的是绝对路径需要把\改为\\
File file1 = new File("桌面/图片get");
System.out.println(file1.getAbsoluteFile());//得到绝对路径
System.out.println(file1.getName());//得到文件名
//创建文件
File file2 = new File("D:/test/test");
System.out.println(file2.exists());
//如果不存在就创建
if (!file2.exists()) {
file2.mkdirs();
}
//默认删除空文件夹
System.out.println(file2.delete());
//文件遍历 只能遍历一级
//list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的【文件名】(包含后缀名),后者为File对象类型的【完整路径】
File file3 = new File("D:\\One Drive\\OneDrive\\桌面\\图片get");
String[] list = file3.list();
for (String s : list) {
System.out.println(s);
}
/* File[] files = file3.listFiles();
for (File file4 : files) {
System.out.println(file4);
}*/
list的运行结果:
listFiles的运行结果:
InputStream和OutStream
//编码 默认为utf-8
//byte[]bytes="abc嗷嗷".getBytes();通过平台默认的字符集编码
byte[] bytes = "abc嗷嗷".getBytes("GBK"); //通过指定的字符集编码
System.out.println(Arrays.toString(bytes));
//结果为:[97, 98, 99, -32, -69, -32, -69]
//解码
//String str=new String(bytes);
String str = new String(bytes, "GBK");//指定字符集解码
System.out.println(str);
//结果为:abc嗷嗷
File file = new File("D:\\JAVA-project\\src\\Week3day4\\test");
InputStream inputStream = new FileInputStream(file);
//遍历读出的方法,文件中有中文会乱码
int c;
while ((c = inputStream.read()) != -1) {
System.out.print((char) c);//abc
}
结果:
//为提高效率可以把文件数据一次性全部读取到一个字节数组可以避免乱码,但是如果文件过大可能会引起内存溢出,不发生乱码
InputStream inputStream = new FileInputStream(file);
//每次读取一个字符数组,如果没有可读的就返回-1
byte[] buffer = new byte[(int) file.length()];
int read = inputStream.read(buffer);
String s = new String(buffer);
System.out.println(s);
结果:
OutputStream outputStream = new FileOutputStream(file, true);//可追加数据
outputStream.write(97);
outputStream.write("\r\n".getBytes());
outputStream.write(97);
outputStream.write("\r\n".getBytes());
outputStream.write(97);
outputStream.close(); // 刷新并关闭
结果:
byte[] bytes1 = "abc阿斯顿".getBytes();
outputStream.write(bytes1);
outputStream.close(); // 刷新并关闭
结果:
文件拷贝
InputStream inputStream = new FileInputStream(
"D:\\One Drive\\OneDrive\\桌面\\图片get\\OIP-C (1).jpg");//得到想要拷贝的文件的路径
OutputStream outputStream = new FileOutputStream(
"D:\\OIP-C (1).jpg");//选择想要拷贝的位置
// 比如说 2049
byte[] buffer = new byte[16459];//查看待拷贝文件的大小,定义一个数组来接收
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);//把指定长度的数组写出去
}
System.out.println("close");
inputStream.close();
outputStream.close();