一、File文件操作类
1.File类的使用
java.io.File类是一个普通的类,直接产生实例化对象即可。如果要实例化对象则需要使用到两个构造方法
public File(String pathname)
public File(String parent, String child),设置父路径和子路径
public File(String parent, String child),设置父路径和子路径
(1)创建一个新文件
createNewFile():返回值为boolean
(2)判断文件是否存在
exists():
返回值为boolean
(3)删除文件
delete():
返回值为boolean
(4)判断路径是否为文件
isFile():
返回值为boolean
(5)判断路径是否为目录
isDirectory():
返回值为boolean
(6)取得文件大小()字节
length():
返回值为long
(7)取得最后一次修改文件的时间
lastModified():
返回值为long
import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; //Java文件操作 public class Test { public static void main(String[] args) { File file = new File("C:\\Users\\李昕阳\\Desktop\\Test1.txt"); if (file.exists() && file.isFile())// 若文件存在且是文件的形式 { System.out.println("文件大小" + file.length()); // 若直接写成file.lastModified(),那么返回的时间就是从1970年1月1日开始到修改的时间并且单位为ms // System.out.println("最后一次修改时间"+file.lastModified()); // 下面是将时间修改为年-月-日的格式 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy年mm月dd日 hh:mm:ss"); Date date = new Date(file.lastModified()); String mString = simpleDateFormat.format(date); System.out.println("最后一次修改时间" + date); // 删除文件 file.delete();// 将文件删除 } else { try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch blocke.printStackTrace(); } } } }
注:在windows的环境下,对于路径的书写是\\而在Linux的环境下对于路径的书写是/,为了解决这个问题,在引用路径时会采用File类的一个常量"public static final String separator "来描述
String sep = File.separator; File file = new File("C" + sep + "Users" + sep + "李昕阳" + sep + "Desktop" + sep + "Test1.txt");
2.目录操作
(1)getParent():返回值为String,取得父路径
(2)getParentFile():返回值为File,取得父File对象
(3)mkdirs():返回值为boolean,创建父目录(无论有多少级都会创建)
(4)isFile():返回值为boolean,判断文件是否存在
(5)isDirectory():返回值为boolean,判断是否为目录
(6)length():返回值为long,取得文件大小()字节
(7)lastModified():返回值为long,最后一次修改的日期
import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) throws IOException { File file = new File("C:\\Users\\李昕阳\\Desktop\\Parent\\Java\\java.txt"); if(!file.getParentFile().exists()) { //若文件java.txt的父目录不存在,就创建目录 file.getParentFile().mkdirs(); } if(file.exists()&&file.isFile()) { //若文件java.txt存在,就将文件删除 System.out.println("文件大小"+file.length()); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy年mm月dd日 HH:mm:ss"); Date date = new Date(file.lastModified()); String mString = simpleDateFormat.format(date); System.out.println("最后一次修改时间" + date); file.delete(); } else { file.createNewFile(); } } }
(7)
listFiles():列出目录中的全部组成
package IO; import java.io.File; public class Test { public static void main(String[] args) { File file = new File("C:\\Users\\李昕阳\\Desktop"); if(file.exists() && file.isDirectory()) { File[] result = file.listFiles(); for(File file2:result) { System.out.println(file2); } } } }
二、字节流与字符流
字节流:InputStream,OututSteam
字符流:Reader,Writer
(1)字节流与字符流操作的本质区别:
字节流是原生的操作,而字符流是经过处理后的操作。
(2)字节流和字符流的基本操作流程几乎是一样
1)根据文件路径创建File类对象 ;
2)根据字节流或字符流的子类实例化父类对象 ;
3)进行数据的读取或写入操作
4)关闭流(close())。
1.字节输出流(OutputStream)
(1)实例化对象的时候有两种构造方法
1)FileOutputStream(File file):接收File类,并覆盖
2)FileOutputStream(File file, boolean append):接收File类,追加
(2)OutputStream类中的方法
1)write(byte b[]):将给定的字节数组内容全部输出
2)write(byte b[], int off, int len):将部分字节数组内容输出
3)write(int b):输出单个字节
(3)
OutputStream类实现的接口
1)Closeable
2)Flushable
package IO; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.print.attribute.standard.MediaSize.Other; public class Test { public static void main(String[] args) throws IOException { //1. File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt"); if(!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } //2. //覆盖 OutputStream outputStream = new FileOutputStream(file); //追加 //OutputStream outputStream = new FileOutputStream(file,true); //3. String string = "\r\n123456789"; outputStream.write(string.getBytes());//全部输出 outputStream.write(string.getBytes(),0,5);//只输出[0,5) //4. outputStream.close(); } }
2.字节输入流(InputStream)
输入流的三种返回值:read(byte[] data):int
1)当读取数据大小>数组data大小:返回data length
2)当数组大小data>读取数据大小:返回具体数据大小
3)没有数据了,还在读取,返回-1
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class Test { public static void main(String[] args) throws IOException { File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt"); if(file.exists()) { InputStream inputStream = new FileInputStream(file); byte[] data = new byte[1024]; int len = inputStream.read(data); String string = new String(data, 0, len); System.out.println("读取内容"+string); inputStream.close(); } } }
3.字符输出流(Writer)
方法与
OutputStream类似
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class Test { public static void main(String[] args) throws IOException { File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt"); if(!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } String string = "字符输出流"; Writer writer = new FileWriter(file,true); writer.write(string); writer.close(); } }
字符输出流
(
Writer
)与字节输出流
(OutputStream)的区别:
字符输出流会先把数据放在缓冲区中,若没有关闭流,则不会将数据写入到目标终端,此时要想把数据输送到目标终端
a).close()
b)调用flush方法,flush():叫做强制清空缓冲区
4.字符输入流(Reader)
import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StreamCorruptedException; import javax.sound.sampled.LineListener; public class Test { public static void main(String[] args) throws IOException{ File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt"); if(file.exists()) { Reader reader = new FileReader(file); char[] data = new char[1024]; int len = reader.read(data); String string = new String(data,0,len); System.out.println("读取内容"+string); reader.close(); } } }