数据文件的输入输出
一、file
java文件类以抽象的方式代表文件名和目录路径名。
创建对象是 无需注意当前路径或者是文件是否存在 都会创建出来
和平台无关路径分隔符
- File.pathSeparator路径结束符 例:“;”。
- File.separator路径分割符 例:“/”。
方法
File():构造器
canExecute():返回布尔值 是否可执行
canWrite():返回布尔值 是否可写
canRead():返回布尔值 是否可读
compareTo(f):比较文件路径
getPath():获取路径
createNewFile():如果文件不存在则创建文件
createTempFile():创建;临时文件
编写dir命令
public class Test{
public static void main(String[] args) {
//file对象
File file = new File("c:\\");
//获取当前file中的所有目录对象
File[] fs = file.listFiles();
//迭代所有file对象
for(File f:fs) {
String dateStr = new SimpleDateFormat("yyyy/MM/dd hh:mm").format(new
Date(f.lastModified()));
String isDirectory = f.isDirectory()?"<DIR>":"";
String isFile = f.isFile()?String.valueOf(f.length()):"";
String FileName = f.getName();
System.out.println(dateStr+"\t"+isDirectory+"\t"+isFile+"\t"+FileName);
}
}
}
mkdir与mkdirs 的区别
mkdir只能创建一级目录
public class Test03 {
public static void main(String[] args) throws IOException {
File file = new File("myfile\\aa\\aa.txt");
//创建路径
File filepath = new File("myfile\\aa");
filepath.mkdirs();
//创建文件
file.createNewFile();
file.setReadOnly();//设置为只读
}
}
二、IO
问题:
-
1: file类本身只能针对文件或者是目录的元数据(除了内容本身)进行操作 不能对于文件中的内容做任何操
作。 -
2:学习过的存储手段:
变量 对象 数组—> 存储都是在内存中的—>程序启动之后 数据存在 程序销毁之后
数据丢失但是在后期真个编码、项目的过程中:
我们对于数据一定要持久的存储起来 方便后期使用以及更新
-
3: 无法将数据持久化存储起来。
解决办法: 通过学习IO流的知识 将数据写入到文件中去 或者读取文件中的数据信息
文件时存储在磁盘上的,电脑关机之后,主要文件保存,那么开机之后数据还在。
IO:
-
IO: input output 输入输出
-
学习流的时候时候 流是有方向的 输入输出说的是针对谁的呢?
编写程序时以程序为考量对象,写入程序视为输入
1、IO流的分类
1:按照输出的数据类型不同:
字节流 输出/输入时 按照字节输出/输入
字符流 输出/输入时 按照字符输出/输入
2:按照流的方向
输入流
输出流
3:按照处理功能
节点流
处理流
[外链图片转存失败(img-ZJ8bGjAl-1564406613334)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\1564192344387.png)]
### 2、InputStream
2.1、FileInputStream
文件字节输入流
每次读取数据时 只能读一个字节,在通过read方法读取时如果读取到了文件末尾,返回-1
read()从此输入流中读取一个字节的数据。如果尚未提供输入,此方法将被暂停。
read(byte [] b) 抛出IOException,返回读入缓冲区的总字节数
read(byte [] b, int off, int len)
public class Test {
public static void main(String[] args) throws IOException {
//1:创建对象
InputStream is = new FileInputStream("C:\\Users\\wawjy\\Desktop\\cc.txt");
int num = 0;
//2:读取数据
while((num=is.read())!=-1) {
//3:分析数据
System.out.println("读取数据:"+num);
}
//4:关闭资源
is.close();
}
}
读取多个字节
public class Test01 {
public static void main(String[] args) throws IOException {
//声明对象
InputStream is = new FileInputStream("C:\\Users\\wawjy\\Desktop\\cc.txt");
//读取数据
//声明一个字节数组
byte[] buf = new byte[1024];
//读取一个字节数组长度的数据 返回读取到的字节数组的长度
int len = is.read(buf);//返回读入缓冲区的总字节数
//分析数据
String msg = new String(buf,0,len);
System.out.println(msg);
//关闭资源
is.close();
}
}
异常处理
public class Test{
public static void main(String[] args) {
// 声明对象
InputStream is = null;
try {
// 创建对象
is = new FileInputStream("C:\\Users\\wawjy\\Desktop\\cc.txt");
// 读取数据
byte[] buf = new byte[1024];
int len = is.read(buf);
// 分析数据
String msg = new String(buf,0,len);
System.out.println(msg);
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally {
//判断流是否开启
try {
if(is!=null) {
// 关闭资源
is.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
2.2、ObjectInputStream
读取顺序和写出顺序一致
**readxxx()?*读取XXX类型的数据,例:readInt,readUTF
3、OutputStream
3.1、FileoutputStream
文件字节输出流
FileOutputStream 输出的目的地是文件 输出流 输出的类型是字节。输出时 如果文件不存在会创建该文件 但是不会创建目录。
创建FileOutputStream对象时 第二个参数boolean值 说明是否在当前文件后追加内容,默认情况是false 不追加,true是追加
public class Test08 {
public static void main(String[] args) throws IOException {
//创建对象
OutputStream os = new FileOutputStream("aaa.a",true);
//声明写出的数据
String msg = "cai niao shi mei you ren quan de";
//写出数据
os.write(msg.getBytes(),0,10);
//关闭资源
os.close();
}
}
3.2、ObjectOutputStream
**writexxx()?*读取XXX类型的数据,例:writeInt,writeUTF
4、序列化
g msg = “cai niao shi mei you ren quan de”;
//写出数据
os.write(msg.getBytes(),0,10);
//关闭资源
os.close();
}
}
#### 3.2、ObjectOutputStream
**writexxx():**读取XXX类型的数据,例:writeInt,writeUTF
### 4、序列化