File类相关操作

1、File类常见方法:

创建:

boolean createNewFile():在指定位置创建文件

如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立就创立文件,而且文件已经存在会发生覆盖

boolean mkdir():创建文件夹,只能创建一级文件夹

boolean mkdirs():创建多级文件夹

renameTo():

删除:

boolean delete():删除失败,返回false

void deleteOnExit():在程序退出时删除指定文件

判断:

boolean exists():判断文件是否存在

boolean isFile():

boolean isDirectory():

在判断文件对象是否是文件或者目录时,必须要先判断该文件对象封装的内容是否存在,通过exists()方法进行判断

isHidden():是否为隐藏文件

isAbsolute():是否为绝对路径

获取信息:

getName():

String getPath():

getParent():返回的是绝对路径中的文件父目录,如果获取的是相对路径,则返回空,如果相对路径中有上一层目录,那么该目录就是返回结果

String getAbsolutePath():

lastModified():

length():返回文件长度

Static File[] listRoots():返回系统中所有的盘符

String [] list():返回该路径下所有的文件和目录——FilenameFilter()

File[] listFiles():

Properties类

存取配置文件

public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        Properties props=new Properties();
        FileInputStream fis=new FileInputStream("props.txt");
        props.load(fis);
        
        Set<String> keys=props.stringPropertyNames();
        for(String key:keys){
            String value=props.getProperty(key);
            System.out.println(key+":"+value);
        }
        
        FileOutputStream fos=new FileOutputStream("props.txt");
        props.setProperty("name", "hello");
        props.store(fos, null);
    }

打印流

字节打印流:
PrintStream

构造函数可以接收的参数类型

1.file对象

2.字符串路径

3.字节输出流:OutputStream

字符打印流
PrintWriter

public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in));
        
        PrintWriter pw=new PrintWriter(System.out,true);
        String line= br.readLine();
        pw.println(line.toUpperCase());
        pw.flush();
        
        pw.close();
        br.close();
        /*while(!"over".equals(line)){
            pw.print(line.toUpperCase());
            line=br.readLine();
        }*/
    }

合并流
SequenceInputStream

对象序列化(被操作的对象需要实现Serializable接口)

ObjectInputStream,ObjectOutputStream

        FileOutputStream fos = new FileOutputStream("person.txt");
        ObjectOutputStream oos=new ObjectOutputStream(fos);
        Person person=new Person("lvjy",30);
        oos.writeObject(person);
        oos.close();
        
        FileInputStream fis = new FileInputStream("person.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Person p=(Person) ois.readObject();
        System.out.println(p);
        ois.close();    


自定义版本号:public staitc final long serialVersionUID=42L

新的类还能操作曾经被序列化的对象

只能把堆里面的数据序列化,但是不能把其他区域中的数据序列化(static变量不能序列化)

对非静态的成员也不想序列化的话,可以在序列化对象相关的成员变量加上trainsient关键字

管道流

PipedInputStream,PipedOutputStream

package com.travelsky.io;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

public class PipedStreamDemo {

	@SuppressWarnings("resource")
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		PipedInputStream in=new PipedInputStream();
		PipedOutputStream out = new PipedOutputStream();
		in.connect(out);
		
		PipedOut po = new PipedOut(out);
		PipedIn pi = new PipedIn(in);
		
		new Thread(po).start();
		new Thread(pi).start();
	}

}
class PipedOut implements Runnable{
	private PipedOutputStream pos;
	public PipedOut(PipedOutputStream pos) {
		super();
		this.pos = pos;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("piped out sleep");
		try {
			Thread.sleep(5000);
			pos.write("hello,world".getBytes());
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}
class PipedIn implements Runnable{
	private PipedInputStream pis;
	
	public PipedIn(PipedInputStream pis) {
		super();
		this.pis = pis;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		byte[] buf =new byte[1024];
		try {
			System.out.println("piped in wait");
			int len=pis.read(buf);
			String content = new String(buf,0,len);
			System.out.println(content);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 RandomAccessFile

该类不算是IO体系中的子类,而是直接继承自Object

但是它是IO包中成员,因为它具备读和写功能

内部封装了一个数组,而且通过指针对数组的元素进行操作。

可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置

通过构造函数可以看出,该类只能操作文件

RandomAccessFile(String name,String mode)  

mode:r,rw,rws,rwd

write方法只写出int类型的最低8位

操作基本数据类型的流对象:DataStream

DataInputStream,DatOutputStream

readInt(),readBoolean,readDouble()

writeInt(),writeBoolean,writeDouble()

writeUTF(),readUTF():加强版的UTF-8

操作字节数组

ByteArrayInputStream:

在构造的时候,需要接收数据源,而且数据源是一个字节数组

ByteArrayOutputStream

在构造的时候,不用定义数据目的,因为该对象中已经内部封装了一个可变长度的字节数组。这就是数据目的地。因为这两个流对象都操作的是数组,并没有使用系统资源,所以不用进行close关闭

操作字符数组

CharArrayReader与CharArrayWriter

操作字符串

StringReader,StringWriter

Tomcat默认的解码方式为ISO8859-1

get方式提交:必须手工转换字符编码

post方式提交:可以通过setCharacterEncoding()函数来设定编码方式

UTF-8修改版:

单字节:0xxxxxxx

两字节:110xxxxx 10xxxxxx

三字节:1110xxxx 10xxxxxx 10xxxxxx

原文地址:https://www.cnblogs.com/lvjygogo/p/8718731.html