1.常量(推荐使用,Java虚拟机执行时会根据Windows或Linux等系统来解析路径,否则容易出现不兼容现象)
“;”—File.separator
“\”—File.pathSeparator
2.新建文件
注意异常捕获。
String fileName ="asd.txt";
File file= new File(FILE_PATH + fileName);
try{
file.createNewFile();
}catch(IOException e){
e.printStackTrace();
}
3.删除
注意文件是否存在的判断
String fileName ="asd.txt";
File file= new File(FILE_PATH + fileName);
if(file.exists()){
f.delete();
}else{
System.out.println("文件不存在");
}
4.创建一个文件夹
String folderName= "asd ";
File file= new File(FILE_PATH + folderName);
File.mkdir();
5.列出目录的全部文件(文件名)
File file = newFile(FILE_PATH);
String[] files =file.list();
for(int I = 0; I < files.length;i++){
System.out.printle(files[i]);
}
6.列出目录的全部文件(文件路径)
使用File[] files = file.Files();
7.目录内的所有文件(递归)
Public Static void print(Filefile){
if(file != null){
if(file.isDirectory()){
File[] fileArray = file.fileList();
for(int i = 0; i < file.length; i++){
print(fileArray[i]);
}
}
} else{
System.out.println();
}
}
8.目录内的所有文件(非递归)
可以用队列,取头,如果是文件夹再放在队列后面
9.RandomAccessFile写入文件
File file = new File(FILE_PATH + fileName);
RandomAccessFile randomAccessFile = newRandomAccessFile(file, “rw”);
randomAccessFile.writeBytes(“asdasd”);
randomAccessFile.writeInt(12);
randomAccessFile.writeBoolean(true);
randomAccessFile.writeChar(‘A’);
randomAccessFile.writeFloat(1.21f);
randomAccessFile.writeDouble(12.11);
randomAccessFile.close();
都是乱码,用字节流,记得关闭流
File file = new File(FILE_PATH + fileName);
OutputStream out = new FileOutputStream(file);
String str = “收到了科涅夫”;
byte[] b = str.getBytes();
for(int i = 0; i < b.length; i++){
out.write(b[i]);
}
out.close();
追加内容,new的时候第二个变量设为true,追加模式
File file = new File(FILE_PATH + fileName);
OutputStream out = new FileOutputStream(file, true);
//\r\n可换行
String str = “啊说的那种类型课程”;
byte[] b = str.getBytes();
for(int i = 0; i < b.length; i++){
out.write(b[i]);
}
10.读取文件内容,先测出文件长度,以申请合适的内存。也可一个一个字节读
File file = new File(FILE_PATH + fileName);
InputStream in = new InputStream(file);
byte[] b = new byte[(int)file.length];
in.read(b);
in.close();
11.若不知道文件多大,需判断是否读到末尾,-1的时候就是末尾
File file = new File(FILE_PATH + fileName);
InputStream in = new InputStream(file);
byte[] b = new byte[1024];
int count = 0;
int temp = 0;
while((temp = in.read) !- 1){
b[count ++ ] = (byte)temp
}
in.close();
字节流和字符流的区别
字节流不用缓冲区,文件本身操作,字符流是通过缓冲区的操作文件的。注释掉关闭文件的代码,使用字节流文件会存在操作的内容,使用字符流文件是没有内容,需要刷新缓冲区。字节流比字符流好一些,硬盘上所有的文件都是字节流的形式进行传输或者保存的,包括图片。字符流内存才会形成。
文件的复制
一边读一边写
字节字符转换
OutputStreamWriter
InputStreamReader
内存操作流(通常是临时操作时使用)
ByteArrayInputStream将内容写入内存
ByteArrayOputStream将内容输出内存
管道流(两个线程之间的通信)
PipeOutputStream管道输出流
PipeInputStream管道输入流
打印流
PrintStream