java输入输出流
流
流:内存与存储设备之间传输数据的通道
流的分类:
输入流:将硬盘中的数据读入内存
输出流:将内存中的数据写入硬盘
按单位分:
字节流:传输的单位为字节
字符流:传输的单位为字符
package IO;
import com.sun.org.apache.xpath.internal.operations.String;
import java.io.FileInputStream;
public class Demo {
public static void main(String[] args) throws Exception{
//创建FileInputStream 类的对象,并指定文件的路径
FileInputStream file = new FileInputStream("d:sss.txt");
//创建文件
//file.read()
//单字节读取
int data = 0;
while ((data=file.read())!=-1){//当file 返回值不等于-1读取之后装在data中,
System.out.print((char) data);
}
//多字节读取
byte[] by = new byte[3];
int count = 0;
while ((count=file.read(by))!=-1){
System.out.println(new String());
}
file.close();
}
}
package IO;
import java.io.FileOutputStream;
public class Demo1 {
public static void main(String[] args) throws Exception{//可能创建不成功,抛出异常
//创建一个文件输出流对象
FileOutputStream file1 = new FileOutputStream("d:\\bbb.txt");
//写入文件
file1.write(97);
file1.write('b');
file1.write('c');
String string = "hello world";
file1.write(string.getBytes());//将string 转为字节流存入file1文件
//关闭
file1.close();
System.out.println("执行完毕");
}
}
package IO;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.FileSystem;
import java.util.ArrayList;
import java.util.Arrays;
/*
* 使用文件字节流 实现文件的复制
* */
public class Demo2 {
public static void main(String[] args) throws Exception{
FileInputStream fis = new FileInputStream("D:\\001.jpg");
FileOutputStream fout = new FileOutputStream("D:\\002.jpg");
ArrayList<Byte> buf = new ArrayList<>();
int count=0;
while((count=fis.read())!=-1){//将图片读出放入count
buf.add((byte)count);//将图片(本质是整形数据)转换为字节流byte 类型追加进入buf
}
for(int i=0;i<buf.size();i++){//遍历buf,写入fout文件
fout.write(buf.get(i));
}
fis.close();
fout.close();
System.out.println("复制完毕");
}
}
字节缓冲流
开辟空间暂存字节或字符流,减少内存访问磁盘的次数,提高IO效率。
创建缓冲流对象之前应先实例化对应的字节流或字符流对象。
package IO;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Demo3 {
public static void main(String[] args) throws Exception{
FileInputStream fis= new FileInputStream("d:\\bbb.txt");
BufferedInputStream bis = new BufferedInputStream(fis);//创建缓冲区,将字节输入流存入缓冲区
int count = 0;
while ((count = bis.read())!=-1){
System.out.print((char) count);
}
bis.close();//关闭缓冲区
}
}
对象流
从文件中读取一个对象称之为反序列化
将对象写入文件中称之为序列化,实例化对应的抽象类时必须实现一个空接口,Serializable 接口
package IO;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class Demo4 {
public static void main(String[] args) throws Exception{
FileOutputStream file1 = new FileOutputStream("d:\\sss.txt");
//创建对象流之前必须创建文件字节流
ObjectOutputStream out = new ObjectOutputStream(file1);
//序列化 将对象写入文件 反序列化 在文件中读对象
Student zhangsan = new Student("zhansan",20);
out.writeObject("zhangsan");//写入对象的操作
//写入对象的类必须实现一个空的标记接口(Serializable)
out.close();
System.out.println("序列化完成");
}
}
打印流
package IO;
import java.io.FileReader;
import java.io.FileWriter;
/*
* 使用FileReader 和 FileWrite 实现文本的复制,只能用于文本复制
* */
public class Demo6 {
public static void main(String[] args) throws Exception{
//创建一个读入流 读入内存
FileReader fi1 = new FileReader("d:\\a.txt");
//创建一个写出流写入硬盘
FileWriter fi2 = new FileWriter("d:\\b.txt");
int data = 0;
while((data=fi1.read())!=-1){
fi2.write(data);
fi2.close();
fi1.close();
}
}
}
File 类和文件夹类
package IO;
import java.io.File;
import java.util.Date;
/*
* 涉及到文件的创建都需要抛出异常,防止创建文件不成功
*
* */
public class Demo7 {
public static void main(String[] args) throws Exception{
separator();
}
public static void separator()throws Exception{
System.out.println("路径分隔符为:"+ File.pathSeparator);//路径分割符
System.out.println("路径分隔符为:"+ File.separator);//名称分隔符
//文件操做
File f1 = new File("d:\\ddd.txt");//new一个文件类的对象 并没有创建文件
if(!f1.exists()) {//如果f1文件不存在,就创建
boolean b = f1.createNewFile();//调用方法创建文件
System.out.println("创建结果为:"+b);
}
//删除文件
//直接删除
// System.out.println("删除结果为:"+f1.delete());
// //使用jvm退出时删除
// f1.deleteOnExit();
// Thread.sleep(5000);//jvm休眠5秒
//获取文件的绝对路径
System.out.println("获取绝对路径为:"+f1.getAbsolutePath());
System.out.println("获取文件的相对"+f1.getPath());
System.out.println("获取文件的名字"+f1.getName());
System.out.println("获取文件的父目录"+f1.getParent());
System.out.println("获取文件的长度"+f1.length());
System.out.println("获取文件的创建时间"+new Date(f1.lastModified()).toLocaleString());
//判断文件是否可写或可读
System.out.println("是否可读"+f1.canRead());
System.out.println("是否可写"+f1.canWrite());
System.out.println("是否是隐藏"+f1.isHidden());//是否时隐藏的
System.out.println("是否是文件"+f1.isFile());
}
}
package IO;
import java.io.File;
import java.io.FileFilter;
public class Demo8 {
public static void main(String[] args) throws Exception{
file();
}
public static void file()throws Exception{
File f = new File("d:\\aa\\bb\\cc");
System.out.println(f.toString());
if (!f.exists()){
f.mkdir();//创建文件夹
System.out.println("创建结果为:"+f.mkdirs());
}
// System.out.println("删除结果为:"+f.delete());
//jvm删除
f.deleteOnExit();
Thread.sleep(5000);//Thread 类中的方法sleep 关闭gvm
//遍历文件夹
File f2 = new File("d:\\aa\\bb");
String[] files = f2.list();
System.out.println("-------------------------------");
for (String string:
files) {
System.out.println(string);
}
System.out.println("============filefilter 接口的使用===============");
File[] fi = f2.listFiles(new FileFilter() {
//调用FileFilter 接口中的FileFilter类new 一个新的对象调用方法FileFilter
@Override
public boolean accept(File pathname) {//pathname路径
if (pathname.getName().endsWith(".jpg")) { //通过路径获取以.JPG 结尾的文件 实现过滤
return false;
}
return false;
}
});
for (File f7: fi) {
System.out.println(f7.getName());
}
}
}
package IO;
import java.util.Properties;
/*
* properties 集合的使用
*
* */
public class Demo9 {
public static void main(String[] args) {
//创建集合
Properties p1 = new Properties();
//添加数据
p1.setProperty("用户","hzansna");
p1.setProperty("sge","20");
System.out.println(p1.toString());
//遍历keyset 方法 entrySet
System.out.println(p1.containsKey("用户"));
//遍历
}
}