-
(3)写方法 raf.write(int) ----> 只写一个字节 (后8位) 同时指针指向下一个位置 准备再次写入,由于顺序写入,先写的后八位会变成高八位。因为要写一个占4个字节的Int型的大数字,应先将最高的八位转变成最低八位,再将第二的高八位转成最低八位来依次写入。int i=0x7fffffff;raf.wreit(i>>>24);raf.wreit(i>>>16);raf.wreit(i>>>8); raf.wreit(i) raf.writeInt(i);//可以直接写一个int byte[] gbk = s.getBytes("gbk");//将String s = "中"。将s转化成gbk编码的字节(这里应该是两个字节) (4)读方法 //读文件,必须把指针移到头部 raf.seek(0);//RandomAccessFile类 设置到此文件开头测量到的文件指针偏移量(这里为文件开头),在该位置发生下一个读取或写入操作。 byte [] buf=new byte[(int)raf.length];//表示是定义了一个长度为raf文件大小的定长字节数组 定义大小时只能填入整型int。所以最大就是Integer.MAX_VALUE 2g int b=raf.read(); 读一个字节, read(byte[] b) 将最多 b.length 个数据字节从此文件读入 byte 数组查看全部
-
随机读取文件有一个很大的好处,例如进行文件下载时候,这个文件很大用五个程序同时去下载,每个程序去下载一部分,最终要把这个文件再拼接成一个文件就要知道每个部分的开始与结束位置(即file.getFilePointer();随机读取指针的位置)。 迅雷为例!!! RandomAccessFile : java提供的对文件内容的访问 既可以读文件 也可以写文件 支持随机访问文件 可以访问文件的任意位置 (1)java文件模型 : 在硬盘上的文件是byte byte byte 存储的 是数据的集合 (2)打开文件 有两种模式 rw 读写 r只读 RandomAccessFile raf=new RandomeAccessFile(file,"rw"); 文件指针, pointer=0; (3)写方法 raf.write(int) ----> 只写一个字节 (后8位) 同时指针指向下一个位置 准备再次写入 (4)读方法 int b=raf.read(); 读一个字节 (5)文件读写完成后一定要关闭 oracle 官方说明 raf.write(int) 写八位。 实际操作的是低八位。为了让低八位变成高八位,就要先把高八位变成低八位。 因为int i=0x7fffffff;Int有符号(最高一位表示正负), 所以 一共有4*8-1位可以用来表示数字其中最高位是0-7 raf.write(i>>>24),将i右移24位,那么i 就应该是0x0000007f 写入 7f 顺序写入的话,最先写的最然成了最左边, 就成了高位 raf.write(i>>>16),将i右移16位,那么i 就应该是0x00007fff //写入ff raf.write(i>>>8),将i右移8位,那么i 就应该是0x007fffff //写入ff raf.write(i),那么i 就应该是0x7fffffff //写入ff 所以一共写入了7fffffff,从时间上来看,7f最先写就成了最高位 byte [] buf=new byte[(int)raf.length];//表示是定义了一个长度为raf文件大小的定长字节数组 定义大小时只能填入整型int。所以最大就是Integer.MAX_VALUE查看全部
-
public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 exists()方法用于判断文件或目录是否存在 file.list() 返回的是 字符串数组 直接子的名称,不包含子目录下的内容 file.listFiles() 返回当前目录下的所有子目录和文件的文件数组名称 ======================================== 如果要遍历子目录下的内容就需要构造成File对象做递归操作 //throws IOException 回避了IO的抛出异常 File[] files = dir.listFiles();//返回的是直接子目录(文件)的抽象 if (file!=null && files.length > 0){ for(File file:files){ if(file.isDrectory()){ listDirectory(file); }else{ System.out.println(file); } } }查看全部
-
file.getParentFile().getAbsolutePath(); 可见getParentFile()得到的是一个File对象,再getAbsolutePath()得到路径名(此处也可不调用后面的方法,因为syso -> (file)就可以得到file.toString() 的内容查看全部
-
File.separator这样实现linux、windows都认识 java.io.File类用于表示文件(目录) 程序员可以通过File类在程序中操作硬盘上的文件和目录 ======================================= File类只用于表示文件(目录)的信息(名称,大小等),不能用于文件内容的访问 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 file=new File("E:\\javaio"); syso -> file.exist(); if (!file.exists()){ file.mkdir(); //如果不存在就建立一个 // file.mkdirs() 创建多级目录 else file.delete(); //存在就删除 syso -> (file.isDirectory()); // 是否是一个目录 syso -> (file.isFile()); // 是否是一个文件 File file2=new File("e:\\javaio\\日记1.txt"); or ("e:\\javaio","日记1.txt") if (!file2.exist()){ file2.createNewFile(); 捕捉异常 syso -> (file) // file.toString() 的内容 syso -> (file.getAboslutePath()); //上同查看全部
-
java是双字节编码 utf-16be 中文两个字节 英文两个字节 GBK中文占两个字节,英文1个字节;utf-8中文占三个字节,英文占1个字节。 文本文件,就是字节序列。可以是任意编码的字节序列,如果我们是在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码。(联通、联这是一种巧合,他们正好符合了utf-8编码的规则。) Eclipes中什么样子的编码项目就只认识该编码的文字,换一种编码就会出现乱码。 当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码 String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。 String s="慕课ABC"; byte[] bytes1=s.getBytes(); //转换成字节序列用的是项目默认的编码gbk for (byte b:bytes1){ //把字节转换成了int 以16进制的方式显示 system.out.println(Integer.toHexString(b & 0xff)+" "); // c4 bd bf ce 41 42 43 } byte[] bytes2=s.getBytes("gbk"); //手动定义用gbk编码 效果相同 但会有异常 中文两个字节 英文一个 byte[] bytes3-s.getBytes("utf-8"); // e6 85 95 e8 af be 中文三个字节 英文一个 //java是双字节编码 utf-16be 中文两个字节 英文两个字节 byte[] byte4=s.getBytes("utf-16be"); String str1=new String(bytes4); //会出现乱码 当你的字节序列是某种编码时,这个时候把自己序列变成字符串,也需要用这种编码方式,否则会出现乱码 String str2=new String(bytes4,"utf-16be"); //这样就不会出现乱码了查看全部
-
随机读取文件有一个很大的好处,例如进行文件下载时候,这个文件很大用五个程序同时去下载,每个程序去下载一部分,最终要把这个文件再拼接成一个文件就要知道每个部分的开始与结束位置(即file.getFilePointer();随机读取指针的位置)。 迅雷为例!!!查看全部
-
RandomAccessFile : java提供的对文件内容的访问 既可以读文件 也可以写文件 支持随机访问文件 可以访问文件的任意位置 (1)java文件模型 : 在硬盘上的文件是byte byte byte 存储的 是数据的集合 (2)打开文件 有两种模式 rw 读写 r只读 RandomAccessFile raf=new RandomeAccessFile(file,"rw"); 文件指针, pointer=0; (3)写方法 raf.write(int) ----> 只写一个字节 (后8位) 同时指针指向下一个位置 准备再次写入 (4)读方法 int b=raf.read(); 读一个字节 (5)文件读写完成后一定要关闭 oracle 官方说明查看全部
-
&0xFF表示将零去除。查看全部
-
字符流的过滤器: BufferedReader readLine 一次读一行 BufferedWriter/PrintWriter 写一行 BufferedReader br=new BuffereReader( new InputStreamReader (new FileInputStream("e:\\javaio\\imooc.txt"))); BufferedWRiter bw=new BufferedWriter( new OutputSteamWriter( new FileOutputStream("e:\\javaio\\immoc3.txt"))); PrintWriter pw=new PrintWriter("e:\\javaio\\imooc4.txt"); String line; while ((line=br.readLine())!=null){ syso -> line; bw.write(line); bw.newLine(); //换行操作 bw.flush(); //或 pw.print(line); // pw.println(line); pw.flush(); } br.close(); bw.close(); pw.close();查看全部
-
FileReader/FileWriter 构造没那么复杂 可直接放对象和路径 但没有直接放编码格式的 FileReader fr=new FileReader("e:\\javaio\\imooc.txt"); FileWriter fw=new FileWrter("e:\\javaio\\imooc2.txt"); //可加append ,true 不会把文件删掉 而是追加 char[] buffer=new char[2056]; int c; while ((c=fr.read(buffer,0,buffer.length))!=-1){ fw.writer(buffer,0,c); fw.flush(); } fr.close(); fw.close(); }查看全部
-
2.字符流 (操作的是文本 文本文件) 默认gbk解析 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流 按照编码处理 FileInputStream in=new FileInputStream("e:\\javaio\\imooc.txt"); nputSreamStreamReader isr=new InputStreamReader(in);//默认项目编码 gbk 可改成 utf-8 char c; while((c=isr.read())!=-1){ syso -> char(c) } //一次读一个字符数组 char[] buffer=new char[8*1024]; int c; while ((c=isr.read(buffer,0,buffer.length))!=-1){ 批量读取放入buffer这个字符数组 从第0个位置开始防止,最多放置buffer.length个 String s=new String(buffer,0,c); syso -> s; }查看全部
-
// 读取指定文件内容 按照16进制输出到控制台 并且每输出10个byte换行 public static void printHex(String fileName) throws IOException{ // 把文件作为字节流进行读操作 FileInputStream in=new FileInputeStream(fileName); int b; int i=1; while((b=in.read())!=-1){ if (b<=0xf) { //补0 单位数前面补0 syso ->"0" } syso -> Integer.toHexString(b)+" "; if (i++%10==0) syso ->; } main: IOUtil.printHex("e:\\javaio\\")查看全部
-
IO流 (输入流、 输出流) 字节流、字符流 1.字符流 (1)InputStream OutputStream 都是抽象类 InputStream 抽象了应用程序读取数据方式 OutputStream 写出 (2)EOF=End 读到-1结束 (3)输入流基本方法: int b=in.read(); 读取一个字节 无符号 填充道整型的低8位 前面补0 -1是EOF in.read(byte[] buf) 直接读到字节数组buf in.read(byte[] buf,int start,int size) (4)输出流基本方法: out.write(int b) 写出一个byte到流 b的低8位 整型是32位 out.write(byte[] buf) 将buf字节数组都写入到流 out.write(byte[] buf,int start,int size) (5)FileInputeStream -->具体实现了在文件上读取数据查看全部
-
RandomAccessFile : java提供的对文件内容的访问 既可以读文件 也可以写文件 支持随机访问文件 可以访问文件的任意位置 (1)java文件模型 : 在硬盘上的文件是byte byte byte 存储的 是数据的集合 (2)打开文件 有两种模式 rw 读写 r只读 RandomAccessFile raf=new RandomeAccessFile(file,"rw"); 文件指针, pointer=0; (3)写方法 raf.write(int) ----> 只写一个字节 (后8位) 同时指针指向下一个位置 准备再次写入 (4)读方法 int b=raf.read(); 读一个字节 (5)文件读写完成后一定要关闭 oracle 官方说明查看全部
举报
0/150
提交
取消