File 和 IO
简单的来说,File是对文件自身的操作包括创建,删除,输出,并不涉及内容的输入输出,由IO操作进行内容上的输入输出。
File的基本操作
创建对象
File file = new File("D:\\csdn\\java.txt");
File file1 = new File("D:"+File.separator)
- 注意括号内填入字符串,是文件在操作系统里的位置
- 不同于Windows系统以“\\”为划分,Linux系统文件目录之间用“/”划分,为了程序的健壮性,可以用File.separator代替划分符号
判断文件及其目录是否存在
/**
isDirectory方法判断对象是否为文件目录
isFile方法判断对象是否为文件
*/
public class Demo5 {
public static void main(String[] args) throws IOException {
File file = new File("D:"+File.separator+"try");
if(file.isDirectory()) {
System.out.println("这是目录");
}
else if(file.isFile()) {
System.out.println("这是文件");
}
}
}
输出文件长度和文件创建时间
//length方法获得文件大小
//lastModified方法获得文件的最后创建时间
long length = file.length();
System.out.println("文件大小:"+length);
System.out.println("文件最后创建时间:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS").format(new Date(file.lastModified())));
File的综合操作练习
列出File对象的所有目录里的文件,这里采取递归的方法
import java.io.File;
import java.io.IOException;
public class Demo5 {
public static void main(String[] args) throws IOException {
File file = new File("D:"+File.separator+"百度网盘");
FileLast.list(file);
}
}
class FileLast{
public static void list(File file) {
if(file.isDirectory()) {
File[] arr = file.listFiles();
for(int i=0;i<arr.length;i++) {
list(arr[i]);
}
}
else if(file.isFile()) {
System.out.println(file);
}
}
}
IO的基本操作
字符流和字节流都可以向文件里输入输出内容,不同的是字符流以Char为单位输入输出,而字节流以byte为单位输出输入。最为重要的是IO流涉及到资源操作,在操作的最后需要关闭资源通道。
字节流的输入的输出
//输入的数据类型
InputStream
//输入方法
Read();
//输出的数据类型
OutputStream
//输出的方法
Write();
//由于InputStream,OutputStream是抽象类型,需要通过他的子类实例化
在InputStream,OutputStream前面加上File就是它的子类
//关闭方法
close();
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Demo5 {
public static void main(String[] args) throws IOException {
File file = new File("D:"+File.separator+"try"+File.separator+"a.txt");
OutputStream output = new FileOutputStream(file,true);
String str = "hhhhhh哈哈哈哈";
output.write(str.getBytes());
output.close();
InputStream in = new FileInputStream(file);
byte[] data = new byte[1024];
in.read(data);
in.close();
System.out.println(new String(data));
}
}
字符流的输入和输出
//输入的数据类型
Reader
//输入方法
Read();
//输出的数据类型
Write
//输出的方法
Write();
//由于Reader,Write是抽象类型,需要通过他的子类实例化
在Reader,Write前面加上File就是它的子类
//关闭方法
close();
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class Demo5 {
public static void main(String[] args) throws IOException {
File file = new File("D:"+File.separator+"try"+File.separator+"a.txt");
Writer output = new FileWriter(file,true);
String str = "hhhhhh哈哈哈哈";
output.write(str);
output.close();
Reader in = new FileReader(file);
char[] data = new char[1024];
in.read(data);
in.close();
System.out.println(new String(data));
}
}
IO的综合操作练习
实现文件的拷贝
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
File srcfile = new File(in.nextLine());
File desfile = new File(in.nextLine());
FileUitl.copy(srcfile,desfile);
}
}
class FileUitl{
public static void copy(File srcfile,File desfile) throws Exception {
if(!desfile.getParentFile().exists()) {
desfile.getParentFile().mkdirs();
}
OutputStream output = null;
InputStream input = null;
try {
output = new FileOutputStream(desfile);
input = new FileInputStream(srcfile);
byte[] date = new byte[1024];
int len = 0;
while((len = input.read(date))!=-1) {
output.write(date,0,len);
}
System.out.println("复制成功");
}catch(Exception e) {
System.out.println("复制失败");
throw e;
}finally{
if(output!=null)
output.close();
if(input!=null)
input.close();
}
}
}