JavaIO流

IO流

java.io.File类,代表一个文件或一个文件目录
创建文件,new File()
构造器1,传入文件路径
可以是相对和绝对路径,由于操作系统中文件路径的分隔符不同java提供File.separator 对不同系统分隔符进行支持
(Window \ ,linux /,通用 File.separator)
构造器2,传入目录和子目录或文件
构造器3,传入目录File类型和子目录或文件

方法API
public String getPath():获取绝对路径
public String getName():获取名称
public String getParent():获取上层文件目录,若无返回Null
public long length():获取文件长度,字节数(不能获取目录)
public long lastModified();获取最后一次的修改时间,毫秒值

文件目录
public String[] list(); 获取指定目录下的所有文件或文件目录的名称数组
public File[] listFiles();获取指定目录下的所有文件或者文件目录的File数组

public boolean renameTo(File dest):把文件重命名为指定的文件路径,dest路径在磁盘中不能存在

public boolean isDirectory():判断是否是文件目录
public boolean isFile();判断是否是文件
public boolean exists(); 判断是否存在
public boolean canRead();判断是否可读
public boolean canWrite();判断是否可写
public boolean isHidden();判断是否隐藏

public boolean createNewFile();创建文件,若文件存在,则不创建返回false
public boolean mkdir();创建文件目录,如果文件目录存在,不创建,上层目录不存在,也不创建
public boolean mkdirs():如果上传文件目录不存在,也一并创建

public boolean delete();删除文件或文件夹,(注意删除不走回收站,删除目录时,目录内不能包含内容)

写入和读取文件内容使用IO流

IO流用于处理设备之间的数据传输,如读/写,网络通讯

读入(程序)内存 输入流 (程序)内存写出 输出流

抽象基类 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
分类 字节输入流 字节输入流 字符输入流 字符输出流
抽象基类 InputStream OutputStream Reader Writer
访问文件 FileInputStream FileOutputStream FileReader FileWriter
访问数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
访问管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
访问字符串 StringReader StringWriter
缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流 InputStreamReader OutputStreamWriter
对象流 ObjectInputStream ObjectOutputStream
FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流 PrintStream PrintWriter
推回输出流 PushbackInputStream PushbackReader
特殊流 DataInputStream DataOutputStream
try
(File file = new File([文件路径]);
FileReader fr = new FileReader(file);){
int data;
while((data = fr.read()) != -1){
System.out.println(data)
}
}catch(Exception e){
e.printStackTrace();
}


//写入,文件路径不存在,创建,存在,默认替换。
try(File file = new File([文件路径]);
FileWriterr fs = new FileWriter(file);){
fs.write("123");
}}catch(Exception e){
e.printStackTrace();
}

// jdk9
       try(FileInputStream fileInputStream = new 
FileInputStream("1.jpg");  
        FileOutputStream fileOutputStream = new 
FileOutputStream("2.jpg");
                           ){
                    fileInputStream.transferTo(fileOutputStream);
             }catch (Exception e) {
                    e.printStackTrace();
             }

//文本文件使用 字符流读写
//图片,视频等非文本文件 使用 字节流读写
             
//缓冲流,套接在节点流上,提示读写效率,内部提供缓冲区

//转换流,字节和字符流相互进行转换,案例 utf8与gbk编码的转换
//解码流 ,InputStreamReader 字节输入转字符输入  默认 UTF-8
InputStreamReader isr = new InputStreamReader(file,"utf-8");
//编码流,OutputSteamWriter  字符输出转字节输出  默认 UTF-8
 OutputStreamWriterr osr = new OutputStreamWriterr(file,"utf-8");

//标准输入输出流,
//标准输入 System.in,默认从键盘输入  setIn()更改输入流
//标准输出流, System.out,默认从控制台输出 setOut()更改输出流

//打印流 PrintStream  / PrintWriter
//提供print / println等

//数据流 DataInputStream / DataOutputStream
//操作Java语言的基本数据类型和String,字节数组的数据

//对象流 ObjectInputStream /ObjectOutputStream 
//操作java对象的数据
//序列化,保存基本类型或对象的机制,不能序列化 static和transient修饰反成员变量,序列化Java基于RMI 远程方法调用机制实现,可以序列化的对象,
//1、需要实现 Serializable或 Externalizable 接口之一,
//2、需要提供全局常量serialVersionUID。serialVersionUID表示不同版本的兼容性,
//未显式定义,反序列化会出现问题,若类进行修改serialVersionUID可能进行变化,建议显式声明
//3、保证接口内部其他对象也是可序列化的。

//反序列化,读取基本类型数据或对象的机制


//随机存储文件流 RandomAccessFile 支持“随机访问”方式,跳动文件的任意地方来读写文件,父类直接继承 Object,实现DataInput/DtatOutPut接口
//mode r 只读  rw 读写  rwd 读写,同步文件更新  rws 读写,同步文件与元数据更新
RandomAccessFile r = new RandomAccessFile([File]/[String],String mode);
r.seek(int pos);//默认0, 将指针指向pos位置进行读写 ,插入时,插前指定插入位置,保存后面的数据,调回指针,进行插入

字符编码
ASCII:美国标准信息交换码。
用一个字节的7位可以表示
ISO8859-1: 拉丁码表,欧洲码表
用一个字节的8位表示
GB2312:中国的中文编码表,最多两个字节编码的所有字符
GBK:中国的中文编码表升级,更多文字,最多两个字节编码
Unicode:国际标准码,融合目前人类所有的字符,每个字符分配唯一字符码,所有字节用两个字节码
UTF-8:变长的编码方式,1-4个字节表示一个字符

早期的JAVA提供了一个File类访问文件系统,但功能有限,NIO2为了弥补不足,JDK7中提供了更为强大的Path(可以看做File类的升级版本)
更多的工具类 Files,Paths
创建Path
Path p = Paths.get([url]);
Path p = Paths.get(str1,str2,...);//多个字符串拼成url路径,不需要分隔符

PathAPI
String toString();返回调用Path对象的字符串表现形式
boolean startsWith(String path) 判断是否已path路径开始
boolean endsWith(String path) 判断是否已path路径结束
boolean isAbsolute():判断是否是绝对路径
Path getParent();返回Path对象包含整个路径,不包含Path对象指定的文件
Path getRoot()返回调用Path对象的根路径
Path getFileName() 返回与调用Path对象关联的文件名
int getNameCount() 返回Path根目录后面元素的数量
Path getName(int inx) 返回指定所有位置 idx的路径名称
Path toAbsolutePath():作为绝对路径返回调用Path对象
Path resolve(Path p) 合并两个路径,返回合并后的路径对应的Path对象
File toFile() 将Path转化为File 对象

Files工具类
Path copy(Path src, Path dest, copyOption...how)文件的复制
Path createDirectory(Path path,FileAttribute... attr) 创建一个目录 Path createFile(Path path,FileAttribute... attr) 创建一个文件
void delete(Path path) 删除一个文件/目录,不存在报错
void deleteIdExists(Path path) 文件/目录,如果存在则删除
Path move(Path src, Path dest,CopyOption...how) 将src移动到dest位置
long size(Path p) 返回path指定文件大小

InputStream newInputStream(Path path,OpenOption...how):获取InputStream对象
OutputStream newOutputStream(Path path,OpenOption...how):获取OutputStream对象

posted @ 2021-01-13 13:06  DragonK  阅读(84)  评论(0)    收藏  举报