其他分享
首页 > 其他分享> > File类,RandomAccessFile类,IO流,NIO流

File类,RandomAccessFile类,IO流,NIO流

作者:互联网

目录

一、File类

1、基本概念

文件信息

相对路径

绝对路径

路径分隔符

2、File类的用处

3、File类的构造方法

4、File类的API

5、File类的练习

使用代码创建一个java工程目录  

二、RandomAccessFile类

1、RandomAccessFile类

2、RandomAccessFile类的实现原理

3、RandomAccessFile类的API

4、RandomAccessFile类的练习

1、复制文件

2、图片美白

三、IO流原理及分类

1、IO流

2、文件的分类

3、IO流的分类

4、InputStream和OutputStream

InputStream和OutputStream的API

5、FileInputStream和FileOutputStream

FileInputStream和FileOutputStream的API

6、练习

将0.txt和1.txt合并为一个3.txt文件

7、BufferedInputStream和BufferedOutputStream

BufferedInputStream和BufferedOutputStream的API

8、Reader和Writer

Reader和Writer的API

9、FileReader和FileWriter

FileReader和FileWriter的API

10、BufferedReader和BufferedWriter

BufferedReader和BufferedWriter的API

11、InputStreamReader和OutputStreamWriter

InputStreamReader和OutputStreamWriter的API

12、PrintStream和PrintWriter

PrintWriter的API

13、练习

下载网页 

14、总结

读写二进制文件

读写文本文件

将字节流转换成字符流

读取控制信息

打印各种格式信息

读写对象(序列化和反序列化)

序列化和反序列化

序列化和反序列化管道

四、字符编码

常见的编码表

五、transient关键字

六、Serializable接口

七、浅拷贝和深拷贝

八、NIO

一、File类

1、基本概念

文件信息

指文件名,类型,扩展名 ,修改时间等

相对路径

指相较于某个路径下,指明的路径

绝对路径

指包含盘符在内的文件及文件目录的路径

路径分隔符

路径中的每级目录之间用一个路径分隔符隔开

windows和DOS:“\”

UNIX和URL:“/”

因为Java程序支持跨平台运行,因此路径分隔符要慎用。

为了解决跨平台隐患,File类提供了一个常量:

public static final String separator:根据操作系统,动态的提供分隔符

2、File类的用处

3、File类的构造方法

4、File类的API

5、File类的练习

使用代码创建一个java工程目录  

|-.settings目录 
|-.classpath文件
|-.project文件
|-src目录
|-bin目录

import java.io.File;
import java.io.IOException;

public class FileDemo {

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

        File f1 = new File("D:/javahomework");
        Boolean isMk = f1.mkdirs();
        System.out.println("主目录是否被创建:"+isMk);
        File f2 = new File("D:/javahomework/settings");
        File f3 = new File("D:/javahomework/.classpath");
        File f4 = new File("D:/javahomework/.project");
        File f5 = new File("D:/javahomework/src");
        File f6 = new File("D:/javahomework/bin");
        Boolean isMk2 = f2.mkdirs();
        Boolean isCreate3 = f3.createNewFile();
        Boolean isCreate4 = f4.createNewFile();
        Boolean isMk5 = f5.mkdirs();
        Boolean isMk6 = f6.mkdirs();
        System.out.println("子目录是否被创建:"+isMk2);
        System.out.println("文件classpath是否被创建:"+isCreate3);
        System.out.println("文件project是否被创建:"+isCreate4);
        System.out.println("子目录是否被创建:"+isMk5);
        System.out.println("子目录是否被创建:"+isMk6);
  }
}

二、RandomAccessFile类

1、RandomAccessFile类

RandomAccessFile类声明在java.io包下:java.io.RandomAccessFile。

2、RandomAccessFile类的实现原理

在文件内部使用一个游标指针,这个指针可以随意指向文件的任何位置,然后通过指针访问文件内容。

3、RandomAccessFile类的API

4、RandomAccessFile类的练习

1、复制文件

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDome {
    public static void main(String[] args) throws IOException{
        copy();
    }
    private static void copy() throws IOException{
        File f1 = new File("D:/0/0.txt");
        RandomAccessFile f2 = new RandomAccessFile(f1,"rw");

        File f3 = new File("D:/javahomework/0.text");
        RandomAccessFile f4 = new RandomAccessFile(f3,"rw");

        if(!f3.exists()){
            f3.createNewFile();
        }

        while (true){
            int data = f2.read();
            if(data == -1){
                break;
            }
            f4.write(data);
        }
        f2.close();
        f4.close();
    }
}

2、图片美白

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class PicDemo {
    public static void main(String[] args) throws IOException {
        File f = new File("D:/javahomework/1.bmp");
        RandomAccessFile raf = new RandomAccessFile(f,"rw");
        raf.seek(54);
        while (true){
            int data = raf.read();
            long pointer = raf.getFilePointer();
            if(data == -1)break;
            data+=100;
            if(data>255){
                data = 255;
            }
            raf.seek(pointer-1);
            raf.write(data);
        }
        raf.close();
    }
}

三、IO流原理及分类

1、IO流

2、文件的分类

3、IO流的分类

抽象基类     字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
抽象基类节点流(文件流)缓冲流(处理流的一种)
InputStreamFileInputStreamBufferedInputStream
OutputStreamFileOutputStreamBufferedOutputStream
ReaderFileReaderBufferedReader
WriterFileWriterBufferedWriter

4、InputStream和OutputStream

InputStream和OutputStream的API

5、FileInputStream和FileOutputStream

FileInputStream和FileOutputStream的API

6、练习

将0.txt和1.txt合并为一个3.txt文件

import java.io.*;

public class Merge {

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

    private static void mergeByte() throws IOException{
        BufferedInputStream bis0 = new BufferedInputStream(new FileInputStream(new File("D:/0/0.txt")));
        BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream(new File("D:/0/1.txt")));
        BufferedOutputStream bos3 = new BufferedOutputStream(new FileOutputStream(new File("D:/0/3.txt"),true));

        byte[] data = new byte[1024];

        while (true){
            int len = bis0.read(data);
            if(len==-1)break;
            bos3.write(data,0,len);
        }
        bis0.close();

        while (true){
            int len = bis1.read(data);
            if(len==-1)break;
            bos3.write(data,0,len);
        }
        bis1.close();
        bos3.close();
    }
}

7、BufferedInputStream和BufferedOutputStream

BufferedInputStream和BufferedOutputStream的API

8、Reader和Writer

Reader和Writer的API

9、FileReader和FileWriter

FileReader和FileWriter的API

10、BufferedReader和BufferedWriter

BufferedReader和BufferedWriter的API

11、InputStreamReader和OutputStreamWriter

InputStreamReader和OutputStreamWriter的API

 

12、PrintStream和PrintWriter

PrintWriter的API

13、练习

下载网页 

URL url = new URL("http://www.baidu.com");
InputStream in =url.openStream();

import java.io.*;
import java.net.URL;

public class Nett {

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

    private static void myNett() throws IOException{
        BufferedReader br1 = new BufferedReader(new InputStreamReader(
                                 new URL("https://www.baidu.com/").openStream(),"utf-8"));
        BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:/0/net.txt")));

        char[] buf = new char[1024];

        while(true){
            int len = br1.read(buf);
            if(len == -1)break;
            String str = new String(buf,0,len);
            bw1.write(str);
        }
        br1.close();
        bw1.close();
    }
}

14、总结

读写二进制文件

读写文本文件

将字节流转换成字符流

读取控制信息

打印各种格式信息

读写对象(序列化和反序列化)

序列化和反序列化

序列化和反序列化管道

四、字符编码

常见的编码表

五、transient关键字

被关键字修饰的字段不参与序列化(密码等敏感字段,在序列化时,不允许写到文件,字段前加transient关键字进行修饰)

六、Serializable接口

七、浅拷贝和深拷贝

八、NIO

早期的Java只提供了一个File类来访问文件系统,但File类的功能比较有限,提供的方法性能也不高,大多数方法在出错时仅返回失败,并不会提供异常信息。

NIO为了弥补不足,引入了Path接口,代表一个平台无关的平台路径,描述了目录结构中文件的位置。

Path可以看成是File类的升级,引用的资源可以不存在。

IO:

import java.io.File;

File file = new File("01.html");

NIO:

import java.nio.file.Path;

import java.nio.file.Paths;

Path path = Paths.get("01.html");

标签:文件,String,IO,RandomAccessFile,int,File,new,字节
来源: https://blog.csdn.net/m0_57151747/article/details/120471915