Java-IO
Java-IO (Input Output)
IO流用来处理设备之间的数据传输。
Java.io 包:包含了所有操作输入、输出需要的类。
按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同可以分为输入流和输出流,
程序从输入流中读取数据,向输出流中写入数据。
字节流的输入输出流分别为:InputStream 和 OutputStream
字符流的输入输出流分别为:Reader 和 Writer
字节流:字节流可以操作任何数据 字符流:字符流只能操作纯字符数据
图片来自:http://www.runoob.com/java/java-files-io.html
1.File
文件和目录路径名的抽象表现形式。
常用方法:
方法名 | 描述 |
---|---|
exists() | 测试文件或目录是否存在 |
createNewFile() | 创建指定文件放回true,若存在则不创建返回false |
mkdir() | 创建文件夹,若存在则不创建 |
mkdirs() | 创建文件夹,如果父文件夹不存在,则创建(创建多级目录) |
delete() | 删除文件或文件夹,当删除文件夹时,若文件夹中有内容,则不能删除 |
renameTo(File dest) | 把文件重命名为指定文件路径,(用于重命名文件或移动文件) |
isDirectory() | 判断是否是目录 |
isFile() | 判断你是否是文件 |
getAbsolutePath() | 获取绝对路径 |
getPath() | 获取相对路径 |
getName() | 获取名称 |
length() | 返回文件的长度,字节数,如果是文件夹则返回0 |
list() | 返回指定目录下所有文件或文件夹名称的字符串数组 |
listFiles() | 返回指定目录小所有文件或者文件夹的File数组 |
lastModified() | 获取最后一次的修改时间,单位毫秒 |
2.FileInputStream
用来从文件中读取数据
FileInputStream fos=new FileInputStream("test.txt");
//InputStreamReader 转换流 ,用于字节流转换为字符流
BufferedReader br=new BufferedReader(new InputStreamReader(fos));
String line; //一行行的读取数据
while((line=br.readLine())!=null) {
System.out.println(line);
}
br.close();// 关闭数据流
fos.close();
3.FileOutputStream
用来向文件中写入数据
FileOutputStream fos=new FileOutputStream("test1.txt",true);
String string="test1";
fos.write(string.getBytes());
fos.close();
4.文件拷贝
FileInputStream fis=new FileInputStream("image.jpg");
FileOutputStream fos=new FileOutputStream("imagecopy.jpg");
int len=0; //读取到有效字节个数 ,当没有数据时放回-1
byte[] buffer=new byte[1024*8];//定义缓冲区大小
while((len=fis.read(buffer))!=-1) {
fos.write(buffer,0,buffer.length);
}
//关闭数据流
fis.close();
fos.close();
5.Java 1.7新特性 自动关闭资源的try语句
语法:
try ( /* 需要自动关闭的资源*/ ){
}
示例:
//文件拷贝
try (InputStream fis = new FileInputStream(source);
OutputStream fos = new FileOutputStream(target)){
byte[] buf = new byte[8192];
int i;
while ((i = fis.read(buf)) != -1) {
fos.write(buf, 0, i);
}
}
catch (Exception e) {
e.printStackTrace();
}
注意:被关闭的对象需要实现 java.lang.AutoCloseable 接口
6. 对象序列化 ObjectOutputStream和ObjectInputStream
对象需要实现 Serializable 接口
public class Person implements Serializable {
public Person(int id, String name) {
Id = id;
Name = name;
}
public int Id;
public String Name;
}
public static void writeObject(List<Person> list){
try (ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream("data.dat"))){
objectOutputStream.writeObject(list);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(" Successfully.");
}
public static List<Person> readObject(){
try (ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream("data.dat"))){
return (List<Person>)objectInputStream.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
7. InputStreamReader 和OutputStreamWriter
他们起到作用是连接字节流和字符流。
文章部分内容摘自网络和图书,如有侵权,请联系我。