IO初级知识点整理

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 listFiles(File dir ,string[] exts, boolean recursive)

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

Exts:指定的扩展名若为null,表示没有
Recursive:为false表示不查找子目录,为true表示该目录下所有内容
Collection 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函数只能删除文件或者空目录,对非空目录无可奈法

你可能感兴趣的:(java)