-
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();查看全部
-
对象的序列化与反序列化查看全部
-
RangdomAccessFile类实现文件的读写查看全部
-
字符流的过滤器: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); line = br.readLine(); 一次读取一行,不能识别换行 一次写入一行 BufferedWriter bw.write(line); bw.newLine(); 单独换行操作 bw.flush(); PrintWriter pw.println(line);//自动换行 pw.flush();查看全部
-
*********************File遍历目录****************************** File的过滤,遍历等操作 列出指定目录下的(包括子目录)的所有文件 File file = new File(); exists() 方法用于判断文件或目录是否存在 isDirectory()方法判断File类的对象是否是目录 throw new IllegalArgumentException();抛出异常 String[] filenames = file.list() //返回的是字符串数组,列出当前目录下的所有子目录和文件,不包含子目录下的内容 //递归 for(String string : filenames){//将filenames数组中的值,循环赋值给string,直到filenames为空时,结束循环 System.out.println(string); } //如果要遍历目录下的内容就需要构造成File对象做递归操作,File提供了直接返回File对象的API File[] files = file.listFiles(); //返回的是直接子目录(文件)的抽象 //递归,遍历出该目录下所有文件信息,包括子目录下的文件 for(File f :files){ if(f.isDirectory){ //递归遍历该目录下的子目录的信息 listDirectory(file); } else{ System.out.pritln(file); } }查看全部
-
FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。只能读取与项目编码方式相同的文件 FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流 FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流 字符流:字符流分为输出流(Reader)和输出流(Writer)。操作的是文本文件。 字符处理,一次处理一个字符 字符处理底层还是基本的字节序列 InputStreamReader:完成byte流解析为char流,按照编码解析 FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt"); //获取字符输入流 InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式 OutputStreamWriter:提供char流到byte流,按照编码处理 FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt"); //获取字符输出流 OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");查看全部
-
字符流 (操作的是文本 文本文件) 注意默认的编码方式 1)编码问题 2)认识文本和文本文件 java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码) 文件是byte byte byte 的数据序列 文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化byte的存储 3)字符流(Reader Writer) 字符的处理,一次处理一个字符 字符的底层依然是基本的字节序列 4)InputStreamreader 完成byte流解析成char流 按照编码解析 OutputStreamWrite 提供char流到byte流 按照编码处理查看全部
-
**************************File类的使用************************************* java.io.File类用于表示文件(目录) File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问 File file = new File("路径"); 路径需要用双斜杠进行转义或者反斜杠 File.separator File的静态成员,设置分隔符 file.exists(); 判断文件是否存在 file.mkdir(); 创建目录 file.mkdirs(); 创建多个目录 file.createNewfile() 进行文件的创建 file.delete(); 删除文件/目录 file.isDirectory() 判断是否是一个目录,返回Boolean类型 file.isFile() 判断是否是一个文件 常用 File对象的API file.toString() //获取目录 file.getAbsolutePath() //获取目录 file.getName() //获取文件名 file.getParent()//获取父目录查看全部
-
IO流输入/输出(编码) ********************************************************** getBytes();---装换成字节序列 Integer.toHexString()--将字节装换成int以16进制的方式显示 GBK编码中文占用两个字节,英文占用一个字节 utf-8编码中文占用三个字节,英文占用一个字节 java是双字节编码 utf-16be 中文占用两个字节,英文占用两个字节 字节序列是某种编码时,字节序列变成字符串,也需要这种编码,否则会乱码 文本文件就是字节序列,可以是任意编码序列,如果在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码查看全部
-
要刷新缓冲区:*.flush(); 批量拷贝最快查看全部
-
readInt readLong 方法都是对FileInputStream方法的包装 DataOutputStream/DataInputStream 对“流”功能的扩展,可以更加方便的读取 int,long, 字符等类型数据 DataOutputStream:使用FileOutputStream构造出来,通过包装FileOutput,可以调用FileOutput类的write方法来构造新的更方便的写方法: new DataOutputStream(new FileOutptStream(file)) wrieteUTF()采用utf-8编码写出字符串 用utf-16be写出字符串,或字符串数组 写完之后一定要关闭流 数据输入输出流: DataInputStream、DataOutputStream 是对“流”功能的扩展,方便读写 DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); dos.writeInt(10); dos.writeLong(10l);字母l dos.writeDouble(10.5); //采用utf-8编码写出 dos.writeUTF("中国"); //采用utf-16be编码写出 dos.writeChars("中国");查看全部
-
FileInputStream文件输入 单字节输入即不用数组。 /** * 批量读取,对大文件而言效率高,也是我们最常用的读文件的方式 * @Inparam fileName * @throws IOException */ public static void printHexByByteArray(String fileName)throws IOException{ FileInputStream in = new FileInputStream(fileName); byte[] buf = new byte[8 * 1024]; /*从in中批量读取字节,放入到buf这个字节数组中, * 从第0个位置开始放,最多放buf.length个 * 返回的是读到的字节的个数 */ int bytes = in.read(buf,0,buf.length);//一次性读完,说明字节数组足够大 int j = 1; for(int i = 0; i < bytes;i++){ System.out.print(Integer.toHexString(buf[i] & 0xff)+" "); if(j++%10==0){ System.out.println(); } }查看全部
-
序列化和反序列化查看全部
-
序列化就是把对象转变成byte型查看全部
-
....查看全部
举报
0/150
提交
取消