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对象
浙公网安备 33010602011771号