一、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();
}
}
}