-
Java.IO.File类表示文件或目录,只用于表示文件或目录得信息,不能用于文件的访问。
常用的API:
1.创建File对象:File file=new File(String path);注意:File.seperater();获取系统分隔符,(所有的系统都认识该分隔符)2.boolean file.exists();是否存在.
3.file.mkdir();创建目录;file.mkdirs();创建多级目录。
4.file.isDirectory()判断是否是目录; file.isFile()判断是否是文件。
5.file.delete();删除文件或目录。
6.file.createNewFile();创建新文件。
7.file.getName()获取文件名称或目录的名字。
8.file.getAbsolutePath()获取绝对路径。
9.file.getParent();获取父级绝对路径。
10.file.getSize();获取文件大小。
11.file.getFormat();获取文件格式名。查看全部 -
file.createNewFile(),创建文件
file.mkdir(),创建文件夹
RandomAccessFile类
RandomAccessFile类 是java提供的对文件内容的访问,即可以读取文件,也可以写文件。
RandomAccessFile类支持随机访问文件,可以访问文件的任意位置
********RandomAccessFile类实现步骤
(1)java文件的模型
在硬盘上的文件是byte byte byte 存储的,是数据的集合
(2)打开文件
有两种模式“rw”(读写) “r”(只读)
RandomAccessFile raf = new RandomAccessFile(new File("路径"),"rw");
文件指针,打开文件时指针在开头 pointer = 0;
(3)写方法
raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
(4)读方法
int b = raf.read()--->读一个字节
(5)关闭流
文件读写完成以后一定要关闭流(Oracle官方说明)
****************RandomAccessFile 类的方法
raf.getFilePointer();--->获取指针的位置
//迅雷实现下载功能,多个进程同时下载一个文件的不同位置,然后将下载后的文件拼接在一起
raf.writeInt(i);//写入一个int
//writeInt()方法的内置代码
raf.write(i>>>24);//高八位向右移动三位
raf.write(i>>>16);
raf.write(i>>>8);
raf.write(i>>>0);
//中文两个字节,字母两个字节,int八个字节
读文件时,必须把指针移动到头部
raf.seek(0);//移动指针到index的位置
raf.length();返回的是lang
//一次性读取,把文件中的内容都读取到字节数组中
byte[] buf = new byte[(int)raf。length()]
raf.read(buf);
//变成字符串,装入数组中进行输出
Arrays.toString(buf);
for(byte b : buf){
//以16进制进行输出
Integer.toHexString(b&0xff)+"";
}
raf.close();raf.getFilePointer()获取当前指针位置
raf.length()获取文件长度
raf.seek()把指针指定到某一位置查看全部 -
String s="慕课ABC";
byte[] bytes1=s.getBytes();//这是把字符串转换成字符数组,转换成的字节序列用的是项目默认的编码
for(byte b: bytes1)
System.out.println(Integer.toHexString(b & 0xff)+" ");// & 0xff是为了把前面的24个0去掉只留下后八位
//toHexString这个函数是把字节(转换成了Int)以16进制的方式显示
byte[] bytes1=s.getBytes("gbk");//也可以转换成指定的编码
gbk编码: 中文占用两个字节,英文占用一个字节
utf-8编码:中文占用三个字节,英文占用一个字节
java是双字节编码,是utf-16be编码
utf-16be编码:中文占用两个字节,英文占用两个字节
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码
String str1=new String(bytes4);//这时会使用项目默认的编码来转换,可能出现乱码
要使用字节序列的编码来进行转换
String str2=new String(bytes4,"utf-16be");这时会使用utf-16be来编码文本文件就是字节序列,可以是任意编码的字节序列
如果我们在中文机器上直接创建文本文件,那么该文件只认识ANSI编码(例如直接在电脑中创建文本文件)查看全部 -
public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
exists()方法用于判断文件或目录是否存在
file.list() 返回的是 字符串数组 直接子的名称,不包含子目录下的内容
file.listFiles() 返回当前目录下的所有子目录和文件的文件数组名称
========================================import java.io.File;
import java.io.IOException;
// 列出file类的一些常用操作,不如过滤、遍历等操作
public class FileUtils {
public static void listDirectory(File dir) throws IOException{
// exists()方法用于判断文件或目录是否存在
if(!dir.exists()){
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
// isDirectory()方法用于判断File类的对象是否是目录
if(!dir.isDirectory()){
throw new IllegalArgumentException(dir + "不是目录");
}
// list方法用于列出当前目录下的子目录和文件
/*String[] filenames = dir.list(); // 返回的是字符串数组 直接子的名称 不包含子目录下的内容
for (String string : filenames) {
System.out.println(dir + ":\\" + string);
}*/
// 如果要遍历子目录下的内容就需要构造成File对象做递归操作,File提供了返回File对象的API
File[] files = dir.listFiles(); // 返回的是直接子目录(文件)的抽象
//for (File file : files) {
//System.out.println(file);
if(files!=null && files.length > 0){
for (File file : files) {
if(file.isDirectory()){
// 递归
listDirectory(file);
}else{
System.out.println(file);
}
}
}
}
}查看全部 -
Java.IO.File类表示文件或目录,只用于表示文件或目录得信息,不能用于文件的访问。
常用的API:
1.创建File对象:File file=new File(String path);注意:File.seperater();获取系统分隔符,如:”\“.
2.boolean file.exists();是否存在.
3.file.mkdir();或者file.mkdirs();创建目录或多级目录。
4.file.isDirectory()或者file.isFile()判断是否是目录或者是否是文件。
5.file.delete();删除文件或目录。
6.file.createNewFile();创建新文件。
7.file.getName()获取文件名称或目录的名字。
8.file.getAbsolutePath()获取绝对路径。
9.file.getParent();获取父级绝对路径。
10.file.getSize();获取文件大小。
11.file.getFormat();获取文件格式名。查看全部 -
String s="慕课ABC";
byte[] bytes1=s.getBytes();//这是把字符串转换成字符数组,转换成的字节序列用的是项目默认的编码
for(byte b: bytes1)
System.out.println(Integer.toHexString(b & 0xff)+" ");// & 0xff是为了把前面的24个0去掉只留下后八位
//toHexString这个函数是把字节(转换成了Int)以16进制的方式显示
byte[] bytes1=s.getBytes("gbk");//也可以转换成指定的编码
gbk编码: 中文占用两个字节,英文占用一个字节
utf-8编码:中文占用三个字节,英文占用一个字节
java是双字节编码,是utf-16be编码
utf-16be编码:中文占用两个字节,英文占用两个字节
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码
String str1=new String(bytes4);//这时会使用项目默认的编码来转换,可能出现乱码
要使用字节序列的编码来进行转换
String str2=new String(bytes4,"utf-16be");这时会使用utf-16be来编码文本文件就是字节序列,可以是任意编码的字节序列
如果我们在中文机器上直接创建文本文件,那么该文件只认识ANSI编码(例如直接在电脑中创建文本文件)查看全部 -
父类没有实现序列化接口,那么在反序列化时就会调用父类的构造函数。
查看全部 -
file.createNewFile(),创建文件
file.mkdir(),创建文件夹
查看全部 -
4)transient关键字
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException{ }
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException{ }
分析ArrayList源码中序列化和反序列化的问题
查看全部 -
序列化和反序列话是基于二进制流的,序列话便是把Student对象的信息以二进制存储在文件obj.bat中,用文本编辑器打开自然是乱码。只有通过反序列话才能将存储的二进制读取出来,然后显示在控制台上。
查看全部 -
3.对象的序列化、反序列化
1)对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化
2)序列化流(ObjectOutputStream),是过滤流---writeObject
反序列化流(ObjectInputStream)---readObject
3)序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
查看全部 -
字符流的过滤器:
BufferedReader --->readLine 一次读一行
BufferedWriter/PrintWriter --->写一行
查看全部 -
2.字符流
1)编码问题
2)认识文本和文本文件
Java的文本(char)是16位无符号整数,是字符的Unicode编码(双字节编码)
文件是byte byte byte ...的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结构
3)字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层仍然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
查看全部 -
8)BufferedInputStream & BufferedOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能
从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中:
FileOutputStream--->write()方法相当于一滴一滴地把水“转移”过去
DataOutputStream--->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去
BufferedOutputStream--->write方法更方便,相当于一瓢一瓢先放入桶中,在从桶中倒入到另一个缸中,性能提高了。
查看全部 -
7)DataOutputStream/DataInputStream
对“流”功能的扩展,可以更加方面的读取int,long,字符等类型数据
DataOutputStream
writeInt()/writeDouble()/writeUTF()
查看全部
举报