java数据输入输出

数据文件的输入输出

一、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、序列化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值