自己做的网站能赚钱吗,邀约网站怎么做请柬,WordPress更该主题,鹿城网络公司系列文章目录 文章目录 系列文章目录前言一、文件的编码二、File类的使用三、RandomAccessFile类的使用 前言
前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到网站#xff0c;这篇文章男女通用…系列文章目录 文章目录 系列文章目录前言一、文件的编码二、File类的使用三、RandomAccessFile类的使用 前言
前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站这篇文章男女通用看懂了就去分享给你的码吧。 一、文件的编码
package com.study.io;/*** 测试文件编码*/
public class EncodeDemo {/*** param args* throws Exception*/public static void main(String[] args) throws Exception {String s好好学习ABC;byte[] bytes1s.getBytes();//这是把字符串转换成字符数组转换成的字节序列用的是项目默认的编码这里为UTF-8for (byte b : bytes1) {//把字节转换成了int以16进制的方式显示System.out.print(Integer.toHexString(b 0xff) );// 0xff是为了把前面的24个0去掉只留下后八位}System.out.println();/*utf-8编码中中文占用3个字节英文占用1个字节*/byte[] bytes2 s.getBytes(utf-8);//这里会有异常展示我们就throw这个异常for (byte b : bytes2) {System.out.print(Integer.toHexString(b 0xff) );}System.out.println();/*gbk编码中文占用2个字节英文占用1个字节*/byte[] bytes3 s.getBytes(gbk);//这里会有异常展示我们就throw这个异常for (byte b : bytes3) {System.out.print(Integer.toHexString(b 0xff) );}System.out.println();/*utf-16be编码中文占用2个字节英文占用2个字节*/byte[] bytes4 s.getBytes(utf-16be);//这里会有异常展示我们就throw这个异常for (byte b : bytes4) {System.out.print(Integer.toHexString(b 0xff) );}System.out.println();/*当你的字节序列是某种编码时这个时候想把字节序列变成字符串也需要用这种编码方式否则会出现乱码*/String str1new String(bytes4);//这时会使用项目默认的编码来转换可能出现乱码System.out.println(str1);//要使用字节序列的编码来进行转换String str2new String(bytes4,utf-16be);System.out.println(str2);}
}分析 “ 0xff”的解释 0xFF表示的是16进制十进制是255表示为二进制就是“11111111”。 那么符表示的是按位数进行与同为1的时候返回1否则返回0 2.字节byte与int类型转换 Integer.toHexString(b 0xff)这里先把byte类型的b和0xff进行了运算然后Integer.toHexString取得了十六进制字符串 可以看出b 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b);,将byte强转为int不行吗?答案是不行的. 其原因在于:1.byte的大小为8bits而int的大小为32bits2.java的二进制采用的是补码形式 Integer.toHexString的参数是int如果不进行0xff那么当一个byte会转换成int时由于int是32位而byte只有8位这时会进行补位。。。。。。 所以一个byte跟0xff相与会先将那个byte转化成整形运算这样结果中的高的24个比特就总会被清0于是结果总是我们想要的。 3.utf-8编码:中文占用3个字节英文占用1个字节 gbk编码:中文占用2个字节英文占用1个字节 Java采用双字节编码就是Java中的一个字符占两个字节是utf-16be编码。中文占用2个字节英文占用2个字节 4.当你的字节序列是某种编码时这个时候想把字节序列变成字符串也需要用这种编码方式否则会出现乱码 5.文本文件 就是字节序列。可以是任意编码的字节序列。 如果我们在中文机器上直接创建文本文件那么该文件只认识ANSI编码例如直接在电脑中创建文本文件
二、File类的使用
package com.study.io;import java.io.File;/*** File类的使用*/
public class FileDemo {/*java.iO.File类表示文件或目录File类只用于表示文件或目录的信息名称大小等不能用于文件内容的访问。*/public static void main(String[] args) {File filenew File(D:\\111);//创建文件对象时指定目录需要用双斜杠因为“\”是转义字符/*目录的中间的分隔符可以用双斜杠也可以用反斜杠也可以用File.separator设置分隔符*/
// File file1new File(d:File.separator);
// System.out.println(file.exists());//exists()判断文件或文件夹是否存在if(!file.exists()){//如果文件不存在file.mkdir();//创建文件夹mkdir()还有mkdirs()创建多级目录}else{file.delete();//删除文件或文件夹}//判断是否是一个目录isDirectory,如果是目录返回true如果不是目录或者目录不存在返回falseSystem.out.println(file.isDirectory());//判断是否是一个文件isFileSystem.out.println(file.isFile());File file2new File(D:\\222,123.txt);//常用APISystem.out.println(file);//打印的是file.toString()的内容System.out.println(file.getAbsolutePath());//获取绝对路径System.out.println(file.getName());//获取文件名称System.out.println(file2.getName());System.out.println(file.getParent());//获取父级绝对路径System.out.println(file2.getParentFile().getAbsolutePath());}
}运行结果 说明
java.iO.File类表示文件或目录 File类只用于表示文件或目录的信息名称大小等不能用于文件内容的访问。 常用的API 1.创建File对象File filenew 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();获取父级绝对路径。
❤❤1、遍历目录
package com.study.io;import java.io.File;
import java.io.IOException;/*** File工具类* 列出File类的常用操作比如过滤、遍历等操作*/
public class FileUtils {/*** 列出指定目录下包括其子目录的所有文件* param dir* throws IOException*/public static void listDirectory(File dir) throws IOException{if(!dir.exists()){//exists()方法用于判断文件或目录是否存在throw new IllegalArgumentException(目录dir不存在);}if(!dir.isDirectory()){//isDirectory()方法用于判断File类的对象是否是目录throw new IllegalArgumentException(dir不是目录);}/*String[] fileNames dir.list();//list()方法用于列出当前目录下的子目录和文件直接是子目录的名称不包含子目录下的内容返回的是字符串数组for (String string : fileNames) {System.out.println(string);}*///如果要遍历子目录下的内容就需要构造成File对象做递归操作File提供了直接返回File对象的APIFile[] listFiles dir.listFiles();//返回的是直接子目录文件的抽象if(listFiles !null listFiles.length 0){for (File file : listFiles) {/*System.out.println(file);*/if(file.isDirectory()){//递归listDirectory(file);}else{System.out.println(file);}}}}
}测试类 1 public class FileUtilsTest1 { 2 public static void main(String[] args) throws IOException { 3 FileUtils.listDirectory(new File(“D:\ioStudy”)); 4 } 5 } 运行结果
三、RandomAccessFile类的使用
RandomAccessFilejava提供的对文件内容的访问既可以读文件也可以写文件。 RandomAccessFile支持随机访问文件可以访问文件的任意位置。
注意 Java文件的模型 示例代码
package com.study.io;import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;/*** RandomAccessFile*/
public class RandomAccessFileDemo {public static void main(String[] args) throws IOException{File demo new File(demo);if(!demo.exists()){demo.mkdir();}File file new File(demo,raf.dat);if(!file.exists()){file.createNewFile();}RandomAccessFile raf new RandomAccessFile(file, rw);//指针的位置System.out.println(raf.getFilePointer());raf.write(A);//只写了一个字节System.out.println(raf.getFilePointer());raf.write(B);int i 0x7fffffff;//用write方法每次只能写一个字节如果要把i写进去就得写4次raf.write(i 24);//高8位raf.write(i 16);raf.write(i 8);raf.write(i);System.out.println(raf.getFilePointer());//可以直接写一个intraf.writeInt(i);String s 中;byte[] gbk s.getBytes(gbk);raf.write(gbk);System.out.println(raf.length());//读文件必须把指针移到头部raf.seek(0);//一次性读取,把文件中的内容都读到字节数组中byte[] buf new byte[(int)raf.length()];raf.read(buf);System.out.println(Arrays.toString(buf));for (byte b : buf) {System.out.println(Integer.toHexString(b 0xff) );}raf.close();}
}运行结果 View Code