关于java:IO初级知识点整理

5次阅读

共计 8039 个字符,预计需要花费 21 分钟才能阅读完成。

1. 字符编码:
计算机中存储的都是二进制,称之为:字节

   计算机中各种文字,标点,称之为:字符

2.Java 中字符存储 & 读取

  当咱们须要展现字符时,会将字节变成字符展现,这个过程称为:解码
  当计算机存储字符时,会将字符变成字节保留,这个过程称之为:编码

3. 常见字符表:
ASCII: 最早的码表,因其余码表都蕴含 ASCII 码表,又叫 根底码表
GBK:国内扩大码,(蕴含 GB2312 和繁体字体)
UTF-8:万国码,汉字 2 - 4 个字节组成,个别是 3 个字节(寰球所有文字都反对)
4.String 类的编解码:
解码:

 String(byte[],String encoding)    将字节数组以指定码表,解码成字符串,即字节变字符。(参数 1:字节数组,参数 2:码表名)

编码:

 getBytes(String encoding)将字符以指定码表,编码成字节数组,即字符变字节,(参数:码表名)

示例代码:
public static void main(String[] args) throws UnsupportedEncodingException {

// 键盘输入字符
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
// 字符转字节——编码
byte[] arrByte=str.getBytes("UTF-8");
System.out.println(Arrays.toString(arrByte));
// 字节转字符——解码
String s=new String(arrByte,"UTF-8");
System.out.println(s);

}

乱码:
起因:编码和解码采纳的码表不同。
解决办法:在解码和编码的时候,应用同一种码表。
5. 文件操作—File 类
5.1 简述 & 入门:

     在未来开发中,常常波及到操作硬盘文件 / 硬盘目录需要,为了能够操作硬盘数据。

Java 中提供了 java.io.File 类,用来代表文件或目录
————————————————————
留神:
1:该类用来进行文件或目录操作
2:该类自身没有对文件目录或文件的数据读写性能
// 示例代码:
public static void main(String[] args) {

// 获取文件目录
File f1=new File("java411/java01");
System.out.println(f1);
System.out.println(f1.exists());
// 获取文件
File f2=new File("java411/io.txt");
System.out.println(f2);
System.out.println(f2.exists());
// 留神:file 获取的文件或目录,不肯定真正存在
  // exists() 该函数次要判断,某个文件 / 目录,是否实在存在于硬盘上,true—存在,false—不存在

}

5.2:相对路径与绝对路径:

 绝对路径:带盘符的残缺门路。相对路径:不带盘符的门路。

绝对路径:实践上从硬盘根目录,能够了解为从我的电脑处登程,须要退出盘符,理论从某个盘符的根目录登程
相对路径:在 idea 中,默认从以后我的项目的根目录登程
5.3:常见 API:
判断办法:

        exists()        判断文件 / 目录是否存在
        isFile()        判断对象是否是文件
   IsDirextory()        判断对象是否是目录
    IsHidden()         判断对象是否为暗藏文件或目录 

public static void main(String[] args) {

File f=new File("java411/io.txt");
// 判断该文件是否存在
System.out.println(f.exists());//true—存在,false—不存在
// 判断是否为文件
System.out.println(f.isFile());//true—文件,false—不是文件
// 判断是否为目录
System.out.println(f.isDirectory());//true- 目录,false- 不是目录
// 判断该文件是否暗藏
System.out.println(f.isHidden());//true—暗藏,false—没有暗藏

}

属性读取办法:

    GetName()           取得文件 / 目录的名称
      Length()           获取文件字节数,仅判断文件,不能判断目录,如果对象是目录返回后果不确定     
  GetAbsolutePath()       获取文件 / 目录绝对路径
       Getpath()         获取文件 / 目录门路
   LastModified()         获取文件最初一次批改工夫(毫秒值)File[] listRoots()          获取操作系统所有盘符

public static void main(String[] args) {

// 读取一个文件
File f=new File("java411/io.txt");
// 获取文件 / 目录名称
System.out.println(f.getName());// 展现文件名称
// 获取文件字节数,只能判断文件,目录判断不了
System.out.println(f.length());// 展现字节数
// 获取文件的绝对路径
System.out.println(f.getAbsolutePath());// 展现绝对路径
// 获取文件最初一次批改工夫(毫秒值)System.out.println(new Date(f.lastModified()).toLocaleString());
// 获取操作系统的所有符盘
System.out.println(f.listFiles());// 展现所有的符盘。

}

createNewFile() 当文件不存在时创立空文件,创立胜利返回 true 失败返回 false;
Mkdir() 当目录不存在时创立空目录,创立胜利返回 true,失败返回 false,

      注:无奈反复创立,或一次创立多个目录,

Mkdirs 当目录链不存在时创立空目录链,创立胜利 1 个或以上目录,返回 true,失败返回 false
// 示例代码
public static void main(String[] args) throws IOException {

// 创立目录链
   // 须要在 java411 下创立 sll 目录,sll 目录下创立 birthday
 //1: 先将目录封装到 file 中
File f=new File("java411/sll/birthday");
System.out.println(f.exists());// 当初是不存在的
// 调用 mkdirs 创立系列目录链
boolean f1=f.mkdirs();
System.out.println(f1);
System.out.println("-------------");
 // 目录曾经创立实现
//2:创立文件
 // 先创立一个空文件到 sll/birthday
 File f3=new File("java411/sll/birthday/0429.txt");
System.out.println(f3.exists());// 此时也是不存在的
// 创键文件
 boolean f4=f3.createNewFile();
System.out.println(f4);//true-- 曾经创立实现

}

// 获取子文件 & 子目录
String[] list() 获取当前目录下所有子文件和子目录名称
File[] listFiles() 获取当前目录下所有的子文件和子目录
// 代码示例
// 获取子文件和子目录名称
File fs=new File(“java411”);
String[] list=fs.list();
for (String s : list) {

System.out.println(s);

}
// 获取子文件和子目录
File[] fes=fs.listFiles();
for (File fe : fes) {

System.out.println(fe);

}

6.File 类其余结构
File(File parent, String child)
从父形象路径名和子路径名字符串创立新 File 实例
File(String pathname)

 通过将给定的路径名字符串转换为形象路径名创立新的 File 实例

File(String parent, String child)
从父路径名字符串和子路径名字符串创立新的 File 实例
public static void main(String[] args) {

// 相对路径
File f1 = new File("测试 / 测试.txt");
System.out.println(f1.exists());

File parentFile = new File("测试");
System.out.println(parentFile.exists());
// 需要:已知父级目录,获取父级目录中的子文件 / 子文件夹
File f2 = new File(parentFile, "测试.txt");
System.out.println(f2.exists());

File f3 = new File("测试", "测试.txt");
System.out.println(f3.exists());

}

7 内容操作 - 数据读写
7.1 简述:

IO 操作:Input Output 操作,即输入输出操作,对硬盘和内存进行操作(输出也叫读 

操作,输入也叫写操作)
所以未来硬盘操作,内存操作,网络数据传输操作,都有应用 IO 操作
输出:把数据读取到程序中,(从文件读取数据)

   输入:把程序中把数据写出,(向文件写出数据)

分类:

7.2 输入流:
7.2.1
字符流:

       FileWriter(File file)
        给一个 File 对象结构一个 FileWriter 对象
      FileWriter(String fileName)
        结构有个给丁文件名的 FileWriter 对象
   FileWriter: 字符输入流,有缓冲区,尽能够操作文本内容

缓冲区有大小空间限度:默认 8KB

public static void main(String[] args) throws IOException {

// 字符输入流(字符流)有缓冲区
   //File f=new File("D:/ 测试 / 测试 1.txt")
// 若文件不存在,则进行创立,若存在,则进行笼罩
FileWriter writer=new FileWriter("D:/ 测试 / 测试 1.txt");
  char[] arr="sll".toCharArray();
  writer.write(arr);
  writer.write("\r\n");
  writer.write("miss");
  writer.write("you");
  // 刷新缓冲区,把缓冲区数据刷新到硬盘文件中
 writer.flush();
 // 收到敞开
writer.close();}

FileOutputSteam: 字节输入流,输入所有内容
public static void main(String[] args) throws IOException {

// 字节输入流
 // 若文件不存在,进行创立,存在,进行笼罩
  FileOutputStream fos=new FileOutputStream("D:/ 测试 / 测试 2.txt");
// 字节输入,不须要新建 flush 刷新缓冲区操作
 fos.write("miss".getBytes("UTF-8"));
 fos.write("you".getBytes("UTF-8"));
 fos.close();

}
注意事项:
1:不同零碎的回车换行:

  Windows: \r\n
  Linux: \n
  Mac:/r

2: 流敞开复用问题:

流若敞开,不可再次复用,否则出异样:java.io.IOException:Stream Closed;

3: 文件内容追加:

输入流默认进行文件数据笼罩操作。

7.3:输出流
7.3.1 字符输出流:适于文本读取
public static void main(String[] args) throws IOException {

    // 创立输出流对象。FileReader reader=new FileReader("D:/ 测试 / 测试 1.txt");

// int read=reader.read();
// System.out.println((char) read);// 强转,将 int 转为 char
// System.out.println((char)reader.read());

    char[] arr=new char[7];
     reader.read(arr);
    System.out.println(Arrays.toString(arr));
    // 收动敞开
    reader.close();}

字节输出流:实用于其余所有文件读取

8 . commons-io
8.1FileUtils:
8.1-1: 文件写办法:

字符输出:

writrStringToFile(File file, String data, String encoding)

    把字符串 data 写到文件 file 中,应用 encoding 指定的编码格局,本办法会覆盖文件原有内容。

writerStringToFile(File file, String data, String encoding ,boolean append)
把字符串 data 写到文件 file 中,应用 encoding 指定的编码格局, append:
True: 不会覆盖文件原有内容,而且把 data 追加到文件原有内容之后。
False: 会覆盖文件原有内容
代码示例:
public static void main(String[] args) throws IOException {

// 创立字符串
String data="sll";
// 将字符串增加到字符串中——append(true—不会覆盖文件原有内容,false—会覆盖文件原有内容)
FileUtils.writeStringToFile(new File("sll/miss/birthday"),data,"UTF-8",true);

}

字节输出:
writeByteArrayToFile(File file,byte[] data)

 把字节数组 data 写入文件 file,本办法会覆盖文件原有内容 

writeByteArrayToFile(File file,byte[] data,boolean append)

 把字节数组 data 写入文件 file,append:True: 不会覆盖文件原有内容,而且把 data 追加到文件原有内容之后。False: 会覆盖文件原有内容

writeByteArrayToFile(File file, byte[] data,int off,int len,boolean append)

  把字节数组 data 写入文件 file 中,

Off: 向外写入其实索引(从 0 开始,蕴含起始)
Len: 向外写入几个字节
Append:True: 不会覆盖文件原有内容,而且把 data 追加到文件原有内容之后。

     False: 会覆盖文件原有内容

public static void main(String[] args) throws IOException {

// 创立字符串
String str="miss,you";
// 转换为字节字符
byte[] data=str.getBytes("UTF-8");
// 覆盖文件原有代码操作
FileUtils.writeByteArrayToFile(new File("sll/miss/birthday"),data);
// 局部写出操作(off- 字节数组的起始索引,len- 写入的字节数)
FileUtils.writeByteArrayToFile(new File("sll/miss/birthday.txt"),data,0,4,false);

}

8.2 目录操作方法:
复制 & 挪动:

 copyDirectory(File srcDir,File Destdir)——复制内容
       把 srcDir 目录下的内容复制到 destDir 目录下(如果 destDir 目录下有同名内容,则会被笼罩,其余目录放弃不变)copyToDirectory(File src,File destDir)——复制整体
        把 src 文件或目录(及目录下所有内容)一并复制到 destDir 目录下(如果 destDir 目录下有同名内容,则会被笼罩,其余目录放弃不变)

copyFile(File srcFile,File destFile)——复制文件

  把 srcFile 文件的内容复制到 destFile 文件中,destfile 文件不存在则创立

MoveDirctory(File srcFile,File destSrc)——挪动整体变成(能够重命名)
把 srcDir 目录以及目录所有内容挪动并变成 destDir 目录
movetoDirectory(File src,File destDir,boolean createDestDir)——挪动整体到(不能够重命名)
把 src 文件或目录剪切到的是 destDir 目录下

     createDestDir:
         True: 当 destDir 目录不存在时创立该目录链
         False:当 destDir 目录链不存在·时,抛出 IOException 异样

代码示例:
public static void main(String[] args) throws IOException {

// 将 miss 的内容复制到 i(只复制目录外面的内容)FileUtils.copyDirectory(new File("sll/miss"),new File("sll/I"));
// 将 miss 整体复制到 you(整体复制蕴含目录)
FileUtils.copyToDirectory(new File("sll/miss"),new File("sll/you"));
// 将文件 sll 复制——不存在会创立
FileUtils.copyFile(new File("sll/miss/birthday.txt"),new File("sll/0429"));
// 将 miss 中的 birthday 文件挪动到 tw 的 birthday
FileUtils.moveFile(new File("sll/miss/birthday.txt"),new File("tw/you"));
// 将 miss 挪动到 tw
FileUtils.moveToDirectory(new File("sll/miss"),new File("tw/a"),true);

}
**
** 查找 & 统计:
Collection<File> listFiles(File dir ,string[] exts, boolean recursive)

 查找 dir 目录下指定扩展名的文件

Exts: 指定的扩展名若为 null,示意没有
Recursive: 为 false 示意不查找子目录,为 true 示意该目录下所有内容
Collection<File> listFilesAndDirs(File dir,IOFileFilter fileFiler,IOFileFiler dirFilter)
Dir: 查找的目录;
FileFilter:
TrueFileFilter.INSTANCE: 示意查找所有文件
FalseFileFilter.INSTANCE: 示意不查找任何文件
其余需要须要自行实现 IOFileFilter 接口
DirFilter:
TrueFileFilter.INSTANCE: 示意查找所有文件
FalseFileFilter.INSTANCE: 示意不查找任何文件
其余需要须要自行实现 IOFileFilter 接口
SizeOf(File file): 读取文件或目录的字节数。(留神:file 类的 length 办法不能读取目录的字节数)
革除 & 删除:
CleanDirectory(File directory):
革除指定目录下所有内容,不会删除目录自身
DeleteDirectory(File directory):

 删除指定目录下所有内容,同时会删除目录本身
  1. 留神:delete 函数只能删除文件或者空目录,对非空目录无可奈法
正文完
 0