File类
- 概念:代表物理盘符中的一个文件或文件夹
- 方法:
createNewFile() | 创建一个新文件 |
mkdir() | 创建一个新目录 |
delete() | 删除文件或空目录 |
exists() | 判断File对象所代表的对象是否存在 |
getAbsolutePath() | 获取文件的绝对路径 |
getName() | 获取名字 |
getParent() | 获取文件/目录所在的目录 |
isDirectory() | 是否是目录 |
isFile() | 是否是文件 |
length() | 获得文件的长度 |
listFiles() | 列出目录中的所有内容 |
renameTo() | 修改文件名为 |
import java.io.File;
import java.io.IOException;
import java.util.Date;
/**
* File类的使用
* 1分隔符
* 2文件操作
* 3文件夹操作
*
* <p>Title: Register</p>
* <p>Description: </p>
* @author Sermiscry
* @date 2021年7月16日
*/
public class Register{
public static void main(String[] args) throws IOException {
//sperator();
fileOpe();
}
//1分隔符
public static void sperator() {
System.out.println("路径分隔符" + File.pathSeparator);
System.out.println("名称分隔符" + File.separator);
}
//2文件操作
public static void fileOpe() throws IOException {
//1创建文件
File file = new File("d:\\File.txt");
// System.out.println(file.toString());
if(!file.exists()) {
boolean b = file.createNewFile();
System.out.println("创建结果" + b);
}
//2删除文件
//2.1直接删除
//System.out.println("删除结果" + file.delete());
//2.2使用jvm退出时删除
// file.deleteOnExit();
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//3获取文件信息
System.out.println("获取文件的绝对路径" + file.getAbsolutePath());
System.out.println("获取文件的路径" + file.getPath());
System.out.println("获取文件名称" + file.getName());
System.out.println("获取父目录" + file.getParent());
System.out.println("获取文件长度" + file.length());
System.out.println("文件创建时间" + new Date(file.lastModified()).toLocaleString());
/*
获取文件的绝对路径d:\File.txt
获取文件的路径d:\File.txt
获取文件名称File.txt
获取父目录d:\
获取文件长度0
文件创建时间2021年7月16日 上午8:52:00
*/
//4判断
System.out.println("是否可写"+file.canWrite());
System.out.println("是否是文件" + file.isFile());//可能是文件夹
System.out.println("是否隐藏" + file.isHidden());
}
}
文件的写入和读出
String类型
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
public class ReadFile1 {
public static void main(String[] args) throws Exception {
//设置一个用于接受数据的缓存区,需要足够大
byte[] data = new byte[10];
//这里使用了相对路径,也可以使用绝对路径
File file = new File("example.123");
//从文件中读取数据,放到缓存区中
InputStream inputstream = new FileInputStream(file);
int n = inputstream.read(data, 0, 10);
inputstream.close();
System.out.printf("读取了%d个字节", n);
System.out.println("Exit.");
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class WriteFile1 {
public static void main(String[] args) throws Exception {
//数据
byte[] data = {0, 2, 4, 6, 8, 10, 12, 14};
File file = new File("example.123");
if(!file.exists()) {
file.createNewFile();
}
OutputStream outputstream = new FileOutputStream(file);
outputstream.write(data, 0, 8);
outputstream.close();
System.out.println("Exit.");
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadFile2 {
public static void main(String[] args) throws Exception {
//用于接受数据的缓存区,需要足够大
byte[] buffer = new byte[100];
//文件在根目录下,不是\src子目录
File file = new File("example.666");
//从文件中读取数据,放到缓冲区中
InputStream inputstream = new FileInputStream(file);
int n = inputstream.read(buffer, 0, 100);
inputstream.close();
System.out.printf("读取了%d个字节\n", n);
//将前n个子接转成字符串
String str = new String(buffer, 0, n, "UTF-8");
System.out.println("内容:" + str);
System.out.println("Exit.");
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
public class WriteFile2 {
public static void main(String[] args) throws Exception {
//字符串
String str = "阿发你好";
//数据
byte[] data = str.getBytes("UTF-8");
//文件路径:当前项目目录下
File file = new File("example.666");
//将数据写入文件中
OutputStream outputstream = new FileOutputStream(file);
outputstream.write(data);
outputstream.close();
System.out.println("Exit.");
}
}
基本数据类型
写入
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
/**
* 基本数据类型的存取
* <p>Title: NormalWriteFile</p>
* <p>Description: </p>
* @author Sermiscry
* @date 2021年7月16日
*/
public class NormalWriteFile {
public static void WriteFile(File file, byte[] data, int size) throws Exception {
OutputStream outputstream = new FileOutputStream(file);
try {
outputstream.write(data, 0, size);
}finally {
outputstream.close();
}
}
public static void main(String[] args) throws Exception {
ByteBuffer bbuf = ByteBuffer.allocate(100);
bbuf.putInt(1234);
bbuf.putDouble(10.55);
//证明int是四字节,double是八字节,float是四字节
int size = bbuf.position();
byte[] data = bbuf.array();
//转化完成后可以按照字节存入文件里面
File file = new File("int.123");
OutputStream outputstream = new FileOutputStream(file);
outputstream.write(data);
outputstream.close();
//这里也可以用WriteFile函数
WriteFile(new File("int.123"), data, size);
System.out.println("Exit.");
}
}
读出
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
public class NormalReadFile {
//读取文件的内容到buffer中
public static int ReadFile(File file, byte[] buffer) throws Exception {
InputStream inputstream = new FileInputStream(file);
try {
return inputstream.read(buffer, 0, buffer.length);
} catch (IOException e) {
// TODO Auto-generated catch block
inputstream.close();
}
return 0;
}
public static void main(String[] args) throws Exception {
File file = new File("int.123");
byte[] buffer = new byte[100];
int size = ReadFile(file, buffer);
//allocate:创建编码器,同时内部创建一个byte[]
//wrap:创建编码器,内部不创建byte[],而是使用外部现成的byte[]
ByteBuffer bbuf = ByteBuffer.wrap(buffer, 0, size);
bbuf.position(0);//将指针移到开头
int a = bbuf.getInt();
double b = bbuf.getDouble();
System.out.printf("a = %d, b = %f\n", a, b);
System.out.println("Exit.");
}
}
示例
对象的编码
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
public class TestDecode {
public static void WriteFile(File file, byte[] data, int size) throws Exception {
OutputStream outputstream = new FileOutputStream(file);
try {
outputstream.write(data, 0, size);
}finally {
outputstream.close();
}
}
public static void main(String[] args) throws Exception {
Student s1 = new Student(1011, "wang", true, "17112341234");
ByteBuffer bbuf = ByteBuffer.allocate(100);
bbuf.putInt(s1.id);
bbuf.put(s1.name.getBytes("UTF-8"));
bbuf.put(s1.sex ? (byte)1 : (byte)0);
bbuf.put(s1.phoneNumber.getBytes("UTF-8"));
int size = bbuf.position();
byte[] data = bbuf.array();
WriteFile(new File("student.123"), data, size);
System.out.println("Exit");
}
}
变长字段
一种编码方式
随机读写
一般用来处理大文件
RandomAccessFile rafile = new RandomAccessFile(file, "r");
rafile.seek(100);//跳到100的位置开始读
文件追加
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
public class JavaAddContent {
/**
* 追加使用BufferedWriter
* @param fileName
* @param content
*/
public static void text1(String fileName, String content) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true)));
out.write(content);
System.out.println("text1写入~~~");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(out != null){
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 追加文件:使用FileWriter
*
* @param fileName
* @param content
*/
public static void text2(String fileName, String content) {
FileWriter writer = null;
try {
// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
writer = new FileWriter(fileName, true);
writer.write(content);
System.out.println("text2写入~~~");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer != null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 追加文件:使用RandomAccessFile
*
* @param fileName 文件名
* @param content 追加的内容
*/
public static void text3(String fileName, String content) {
RandomAccessFile randomFile = null;
try {
// 打开一个随机访问文件流,按读写方式
randomFile = new RandomAccessFile(fileName, "rw");
// 文件长度,字节数
long fileLength = randomFile.length();
// 将写文件指针移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
System.out.println("text3写入~~~");
} catch (IOException e) {
e.printStackTrace();
} finally{
if(randomFile != null){
try {
randomFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 在文件的前面进行追加
* @param fileName
* @param content
*
*/
public static void text4(String fileName, String content) {
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(fileName));
String line=null;
//一行一行的读取
StringBuilder sb=new StringBuilder();
sb.append(content);
while((line=reader.readLine())!=null) {
sb.append(line);
sb.append("\r\n");
System.out.println( new String(reader.readLine().getBytes("ISO-8859-1"), "UTF-8")); //UTF-8是你文本编码格式
}
reader.close();
//写回去
RandomAccessFile write=new RandomAccessFile(fileName,"rw");
// write.writeBytes(sb.toString());//会产生中文乱码
write(sb.toString().getBytes());
System.out.println("text4写入~~");
write.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void write(byte[] bytes) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
try{
File file = new File("d://text.txt");
if(file.createNewFile()){
System.out.println("Create file successed");
}
text1("text.txt", "123"+"\r\n");
text2("text.txt", "456"+"\r\n");
text3("text.txt", "789"+"\r\n");
text4("text.txt", "撒范德萨"+"\r\n");
}catch(Exception e){
System.out.println(e);
}
}
}