目录
4.3.1 读出某一文件的内容--FileInputReader & FileInputStream
4.4.1 FileOutputStream()--向文件写入字符
1.IO的概念
IO的底层实现异常复杂,可以抽象为是对流(stream)的操作。
2.java IO的体系
3.文件及其操作
3.1 代码演示
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws Exception {
//指定抽象路径
File file = new File("F:\\abc.txt");
file.createNewFile();
System.out.println("是否为文件夹:"+file.isDirectory());
System.out.println("是否为文件:"+file.isFile());
System.out.println("是否为隐藏文件:"+file.isHidden());
System.out.println("最后一次修改时间:"+new Date(file.lastModified()));
//file.getTotalSpace()--所占字节大小 /1024[KB]/1024[MB]/1024[G]
System.out.println("获取该盘符的总空间大小:"+file.getTotalSpace()/1024/1024/1024+"G");
System.out.println("获取该盘符的空闲空间大小:"+file.getFreeSpace()/1024/1024/1024+"G");
//列出C盘下的所有目录+文件
File f = new File("C:\\");
File[] fs = f.listFiles();
for (File f1 : fs) {
//获取文件的名称
System.out.println(f1.getName());
}
//删除文件 谨慎操作
file.delete();
System.out.println("文件是否存在:"+file.exists());
}
}
执行结果如下图所示:
3.1.2 实例:统计某一文件下的图片总数
import java.io.File;
public class FileDemo02 {
//统计图片的数量
static int cnt = 0;
//统计盘符中存在图片个数
public static void find(File file) {
//如果是文件
if(file!=null && file.isFile()) {
String fileName = file.getName();
if(fileName.endsWith(".jpg" ) || fileName.endsWith(".png")) {
cnt++;
// System.out.println(fileName);
}
return;
}
//列出盘符下的所有文件
File[] fs = file.listFiles();
if(fs!=null) {
for (File f1 : fs) {
//递归调用
find(f1);
}
}
}
public static void main(String[] args) {
File file = new File("D:\\");
find(file);
System.out.println("图片数量:"+cnt);
}
}
执行结果如下图所示:
4.IO流
4.1 示意图
4.2 实例--字节流
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("F:\\drill.txt");
OutputStream out = new FileOutputStream(file);
out.write('z');
out.close();
}
}
执行结果如下图所示:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("F:\\drill.txt");
InputStream in = new FileInputStream(file);
int n = 0;
while((n=in.read()) != -1) {
System.out.println((char)n);
}
}
}
4.3 实例--字符流
4.3.1 读出某一文件的内容--FileInputReader & FileInputStream
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputStreamDemo {
public static void main(String[] args) {
//获取当前线程的路径 -- bin/
String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
System.out.println(path);
//当前项目路径名
path = path.substring(0,path.length()-4);
System.out.println(path);
String fileName = path+"src/com/it/file/FileDemo02.java";
//包装模式
try {
InputStreamReader r =
new InputStreamReader(new FileInputStream(fileName));
int n = 0;
while((n=r.read()) != -1) {
System.out.print((char)n);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行结果部分代码如下所示:
4.3.2 读出某一文件的内容--FileReader
import java.io.FileReader;
import java.io.Reader;
public class ReaderDemo {
public static void main(String[] args) {
String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
path = path.substring(0,path.length()-4);
String fileName = path+"src/com/it/file/FileDemo02.java";
//try...with...resources
try(Reader in = new FileReader(fileName);){
int n = 0;
while((n=in.read()) != -1) {
System.out.print((char)n);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
执行结果部分代码如下所示:
4.4 输出流--尾部追加问题
4.4.1 FileOutputStream()--向文件写入字符
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class outputStreamDemo {
public static void main(String[] args) throws IOException {
try(OutputStream out = new FileOutputStream("D:\\out.txt");) {
out.write('x');
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
执行结果如下图所示:
4.4.2 使用FileWriter
- FileWriter("",false)覆盖重写文件
- FileWriter("",true)在原文件内容进行追加 程
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class WriterDemo {
public static void main(String[] args) throws IOException {
Writer out = new FileWriter("D:\\out.txt");
//追加
// Writer out = new FileWriter("D:\\out.txt",true);
out.write("test....");
out.flush();
out.close();
}
}
执行结果如下图所示:
5.try...with...resources
java的一大特性就是JVM对内部资源实现自动回收,即垃圾回收机制,给开发者带来极大的便利。但是JVM对外部资源的引用无法自动回收,例如数据库连接,网络连接以及输入输出IO流等。因此,该类资源需要手动关闭,不然会导致资源泄露,连接池溢出以及文件被异常占用等。
try{
}catch(Exception e){
//异常捕获
}finally{
//关闭连接,释放资源
}
/*JDK1.7之后的try-with-resources关闭外部连接*/
try(Reader in = new FileReader(fileName);){
int n = 0;
while((n=in.read()) != -1) {
System.out.print((char)n);
}
}catch(Exception e) {
e.printStackTrace();
}
从程序员的角度看:
用户就是一种在你执行read指令时进行输入的外设。
序员的角度看:
用户就是一种在你执行read指令时进行输入的外设。