// 1. 创建文件对象
File file = new File("E:\\ComputerScience\\java\\IO\\test.txt");
// 2. 是否存在路径
System.out.println(file.exists());
// 3. 判断是否是文件
System.out.println(file.isFile());
// 4. 判断是否是文件夹
System.out.println(file.isDirectory());
// 5. 获取文件的名称(包括后缀)
System.out.println(file.getName());
// 6. 获取文件大小
System.out.println(file.length());
// 7. 获取文件最后修改时间
System.out.println(file.lastModified());
// 8. 获取创建文件对象时,使用的路径
System.out.println(file.getPath());
// 9. 获取绝对路径
System.out.println(file.getAbsolutePath());
File[] files = file.listFiles();
for (File file : files) {
System.out.println(file);
}
按流中数据的最小单位:
InputStream
OutputStream
Reader
Writer
FileInputStream
把磁盘文件中的数据以字节的形式读入到内存中去。
FileOutputStream
finally是用于在程序执行完后进行资源释放的操作,即便出现了异常,也会执行finally的代码(专业级做法)
IDEA的快捷键是ctrl + alt + t
try {
test4();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("执行结束");
}
try-with-resource
是JDK7后有的,更加简洁,不需要写finally这个臃肿的代码块。即不需要我们去写一些close代码了,只需要在try的时候放到小括号里面。
static void test4() throws Exception {
// 注意,括号里面只能放置资源对象
try (
OutputStream os = new FileOutputStream("test2.txt", true);
) {
byte[] bytes = "我爱你中国".getBytes();
os.write(97);
os.write(bytes);
// 换行
os.write("\r\n".getBytes());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
字节流适合复制文件,但不适合读写文本文件;而字符流更适合读写文本文件内容。
字符流读文件,会把每一个字母、函字看成一个字符,所以不会出现乱码的问题。
FileReader(文件字符输入流)
static void test1() {
try (
Reader fr = new FileReader("test.txt");
) {
// 1. 一个一个的读取
// int c; // 记住每次读取的字符编号
// while ((c = fr.read()) != -1) {
// System.out.print((char) c);
// }
// 2. 读取多个字符
int len;
char[] buf = new char[3];
while((len = fr.read(buf)) != -1) {
System.out.print(new String(buf, 0, len));
}
} catch (Exception e) {
e.printStackTrace();
}
}
FileWriter
字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效!!!
还有一些其他的流,就不一一列举了。
InputStreamReader/OutputStreamWriter
PrintStream/PrintWriter
DataInputStream/DataOutputStream
java.io.Serializable
)Commons-io是apache提供的一组有关IO操作的小框架,目的是提高IO流的开发效率。需要去Apache官网下载。
public class Properties_Demo1 {
public static void main(String[] args) throws Exception {
// 1. 创建一个Properties对象
Properties properties = new Properties();
// 2. 加载属性文件的键值对到对象中
properties.load(new FileReader("src\\users.properties"));
System.out.println(properties);
// 3. 根据键取值
System.out.println(properties.getProperty("张无忌"));
properties.forEach((k, v) -> {
System.out.println(k + " " + v);
});
}
}
<users>
<user id = "1">
<name>JehanRioname>
<sex>男sex>
<password>123456password>
user>
<user id = "2">
<name>Bjergsenname>
<sex>男sex>
<password>654321password>
user>
users>