JAVA自学整理8

File类

File类是文件和目录路径名的抽象表示
常用构造方法

				File file=new File(String pathname)
				参数为文件路径名

File类常用功能
创建功能
1.public boolean creatNewFile():利用有参构造创建对象后,作为参数的路径名文件不存在则创建文件,返回值为true 反之为false

							例:File file=new File("E:\\JAVA\\1.txt")
							若1.txt文件不存在则会创建1.txt文件
  1. public boolean mkdir():利用有参构造创建对象后,作为参数的路径名目录不存在则创建目录,返回值为true 反之为false

    				例:File file=new File("E:\\JAVA\\1.txt")
    						若1.txt目录不存在则会创建以1.txt为名的文件夹目录
    

3.public boolean mdkirs():利用有参构造创建对象后,作为参数的路径名目录不存在则创建目录,返回值为true 反之为false(可创建多级目录)

				例:File file=new File("E:\\JAVA\\1.txt")
							若JAVA目录,1.txt目录不存在则会创建JAVA,1.txt为名的文件夹两个目录

exist
判断获取功能

1.public boolean isDirectory():判断抽象路径的表示的对象是否为目录
2.public boolean isFile():判断抽象路径的表示的对象是否为文件
3.public boolean exist:判断抽象路径的表示的对象是否为存在
4。public String getAbsolutePath():返回此抽象路径名的绝对路径字串
5.public String getpath():返回此抽象路径名的字符串
6.public String getName():返回由此抽象路径名表示的文件或目录名称
7.public String[ ] list():返回此抽象路径名下的文件和目录的名称字符串数组
8.public File[ ] listFile():返回此抽象路径名下的文件和目录的名称File 数组,即数组中每个元素都为File对象 都有路径名信息

删除功能
public boolean delete():删除此抽象路径名表示的文件或者目录

IO流

作用:处理设备间的数据传输问题(文件复制,文件上传,文件下载)

数据流向分类
输入流:读取数据
输出流:写数据

数据类型分类
字节流(字节输入流,字节输出流)
字符流(字符输入流,字符输出流)

如何判断使用何种数据类型流:数据通过windows自带的记事本打开,人还能读懂的使用字符流反正使用字节流,若不知道究竟用哪种可直接使用字节流

字节流

1.pulic abstract class InputStream:抽象类,为所有字节输入流的所有类的超类
2.pulic abstract class OutputStream:抽象类,为所有字节输出流的所有类的超类

FileOutputStream:字节输出流类
构造方法:FileOutputStream fos=new FileOutputStream(String name)
创造对象方法

		FileOutputStream fos=new FileOutputStream("F:\\1.txt")//参数为路径名
		此方法工作了3件事情
		A:调用系统功能创建了1.txt文件
		B:创建了字节输出流对象fos
		C:让字节输出流对象fos 指向1.txt文件 ,后续的写操作都是针对该文件

FileOutputStream常用方法
1.void write(int b):将指定字节写入此文件输出流对象所指文件

另外两种重载方式
void write(byte [ ] b):把字节数组的数据全部写入文件,一次性写入多个字节数据
void write(byte [ ] b, int off,int len):把字节数组的数据从off索引位置开始写入len个字节数据,一次写入数组的部分数据

2.void close():关闭此文件输出流并释放与此流相关联的任何系统资源

注意点:对字节流追加输入需要 使用另外的构造方法
FileOutputStream fos=new FileOutputStream(String name boolean append)

FileInputStream:字节输入流
构造方法:FileInputStream fis=new FileInputStream(String name)

字节流读取数据方法
1.int read():读取文件中下一个字节数据,并返回为int类型,若已经到达末尾则返回-1
2.int read(byte[ ] b):一次最多读取b.length个数据,并存入数组b中 返回值int代表每次读入的字节数据总数

字节输入流读取数据后的输出

利用while循环判断是否已经读取到了末尾
byte[ ] b=new btye[1024]
int num=0;
while((num=fis.read(b))!=-1){
sout(new String(b,0,num)
}

将获取内容的数组转为String类型
String str=new(byte[ ] b,int offset,int length)

offset参数一般设0表示从数组0号位置开始转换length设置为读取到数据的个数

特殊流

一、打印流

1.字节打印流

构造方法:PrintStream ps=new PrintStream(String fileName)
注意点:若使用继承父类FilterOutputStream的write方法,查看数据是会转码,使用自己特有的方法print或者println,查看数据的原员工输出

2.字符打印流

构造方法

  1. PrintWriter pw=new PrintWriter(String FileName)
  2. PrintWriter pw=new PrintWrite(Writer out,boolean autoFlush)
    autoFlush若为true那么调用println,print或者format方法将会自动刷新输出流缓冲区

二、对象序列化流

目的:将对象内容保存到磁盘中,或者在网络中传输对象
对象实现序列化的前提:该对象所对应的类必须要实现serializable接口

1.对象序列化流

构造方法

ObjectOutputStream  oos=new ObjectOutputStream(OutputStream  out);
//其中参数可使用FileOutputStream对象直接指定对象序列化要将对象内容写入哪个文件
ObjectOutputStream  a=new ObjectOutputStream(new FileOutputStream(F:\\1.txt));
//此构造方法表面,将对象序列化后写入F盘下的1.txt文件中

序列化方法
调用类中的writeObject(Object obj)将对象进行序列化,并写入创建对象时指定的文件中

ObjectOutputStream  a=new ObjectOutputStream(new FileOutputStream(F:\\1.txt));
a.wirteObject(obj)//将对象obj进行序列化写入文件1.txt中
a.close()//关闭资源

2.对象反序列化流

目的:将序列化后的对象重新读取还原
构造方法
与序列化构造方法类似,直接使用FileInputStream对象,指定对象序列化后存入的文件进行读取

ObjectInputStream ois=new ObjectInputStream(new FileInputStream(F:\\1.txt);
//1.txt为对象序列化后信息的存放文件

反序列化方法
调用类中的 Object readObject()将文件中的信息进行反序列化读取一个序列化的对象,并返回该对象

ObjectInputStream ois=new ObjectInputStream(new FileInputStream(F:\\1.txt);
Object obj=ois.readObject();//返回对象为Object类型 
//将返回对象进行向下转型为原对象的类型 例:原来为Student类对象
Student s=(Student) obj;

对象序列化流可能会出现问题

问题1: 对象序列后,修改了该对象类的相关信息,进行反序列化数据读取会出问题
**原因分析:**类的串行版本与从流中读取类的描述类型不匹配。即当对象序列化时,系统会为该类分配一个serialversionUID, 若将此类进行修改那么该类的UID就会发生变化,进行反序列化时流中读取的为类修改前的UID,与新的UID无法匹配就会导致读取失败
解决方法: 在该类中显示的声明一个serialversionUID那么该类修改时此UID也不会变化

private static final long serialVersion=1111;//必须要用 private static final三个关键字修饰

**问题2:**若类中某个属性,不想被序列化如何处理
解决方法: 为该属性添加一个transient关键字进行修饰

private int a;
private String b;
private transient int c;

此时进行序列化a,b都会会被序列化而c不会

三、properties流

  1. 是一个Map体系集合类
  2. Properties可以保存到流种或从流中加载,用于一个读取配置文件的相关信息
    构造方法
Properties pp=new Properties();//不用声明键,值的类型

Properties特有方法

  1. Objet setProperty(String key,String value)
Properties pp=new Properties();
pp.setProperty("键","键映射的值");

设置集合的键值都为String类型参数

  1. String getProperty(String key)
Properties pp=new Properties();
pp.getProperty("1")

查找键为”1“所映射的值,也为String类型

Properties与IO流相结合的方法(用于将配置文件的信息读取和写入)

  1. void load(InputStream inStream):从输入字节流读取属性列表(键和元素对)
  2. void load(Reader reader):从输入字符流读取属性列表
  3. void store(OutputStream out,String comments):将properties对象中的键和值写入字节输出流对象指定的文件中,comments为描述信息,不描述可以为null
  4. void store(Writer writer,String comments):将properties对象中的键和值写入字符输出流对象指定的文件中,comments为描述信息,不描述可以为null

四级标题

五级标题
六级标题

猜你喜欢

转载自blog.csdn.net/lvyangxue/article/details/106721441
今日推荐