File类
一.小知识
.绝对路径---有盘符,相对路径---无盘符(这个相对的意思:默认情况下,Java.io包中的类总是根据当前用户目录来解析性对路径名。此目录由user.dir确定,通常是java虚拟机的调用位置。)
二.方法
举例
package com.zx.test1;
import java.io.File;
importjava.io.IOException;
publicclass T1 {
publicstatic void main(String[]args) {
/*在该路径下创建一个文件,/或者\都可以.
*在Linux中,只能用/
*在windows中,都可以。而\也是转义字符,故需要\\
*/
// File file=new File("C:\\Users\\Administrator\\Desktop\\1.txt");
File file=new File("C:/Users/Administrator/Desktop/1.txt");
/* 如果文件存在,打印成功;文件不存在,创建它
*exists()判断文件是否存在
if(file.exists()){
System.out.println("文件已经存在");
}else{
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
file.delete();
System.out.println("文件删除成功");
//isDirectory()判断文件是否为文件夹(文件夹即是目录的意思)
System.out.println(file.isDirectory());*/
file.mkdir();
System.out.println("文件夹创建成功");//在该路径下的同名文件不存在时,建立同样的文件夹
}
}
Io流
一.相关概念
1.流:数据传输和交换的载体
2.分类:
&&按处理数据类型:字节流(8位二进制),字符流(16位二进制)
&&按数据流的方向:输入流(数据进入内存)输出流(从内存中输出数据)
&&按处理数据类型:节点流,处理流
二.案例
1.package com.zx.test1;
import java.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
/*
* 将文件中的数据输入内存中
*/
publicclass T1 {
publicstatic void main(String[]args) {
File file=new File("1.txt");
FileInputStream fis=null;//为了方便关闭fis,故刚开始设为null
try {
fis=new FileInputStream(file);
byte[]b=newbyte[fis.available()];//因为fis.read(参数为字节型)
fis.read(b);
String str=new String(b);//为了判断是否读入内存中去了
System.out.println(str.toString());
} catch (FileNotFoundExceptione) {
e.printStackTrace();
} catch (IOExceptione) {
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOExceptione) {
e.printStackTrace();
}
}
}
}
}
2.
publicclass T1 {
publicstatic void main(String[]args) {
String str="世界这么苦,找个人一起受苦吧";
File file=new File("1.txt");
FileOutputStream fos=null;//为了方便关闭fos,故刚开始设为null
try {
/*
*fos=new FileOutputStream(file,false);替换
*/
fos=newFileOutputStream(file,true);//追加。
fos.write(str.getBytes());//把数据一起写入文件
System.out.println("文件写入成功");
} catch (FileNotFoundExceptione) {
e.printStackTrace();
} catch (IOExceptione) {
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOExceptione) {
e.printStackTrace();
}
}
}
}
}
3.
publicclass Task2 {
publicstatic void main(String[]args) {
Print p=new Print();
//从文件1复制粘贴到文件2
File oldFile=new File("1.txt");
File newFile=new File("2.txt");
p.IOFile(oldFile,newFile);
}
}
class Print{
publicstatic void IOFile(FileoldFile,File newFile){
/*
*判断文件是否存在
* 是 :判旧文件是否为空
*/
if(oldFile.exists()&&newFile.exists()){
String str=getDate(oldFile);
if(str.equals(" ")){
System.out.println("文件是空文件");
}else{
//把读取到的内容写到新文件中
setDate(str,newFile);
}
}else{
System.out.println("文件不存在");
}
}
//从旧文件中读取文件,输入:到内存中 读取文件
publicstatic StringgetDate(File oldFile){
String InFo=" ";
FileInputStream fis=null;
try {
fis=new FileInputStream(oldFile);
byte[]b=newbyte[fis.available()];
fis.read(b);
InFo=new String(b);//??????????????????????????
System.out.println("读取成功");
} catch (FileNotFoundExceptione) {
e.printStackTrace();
} catch (IOExceptione) {
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
returnInFo;
}
//输入到新文件。输出,从内存中出去,写
publicstatic void setDate(Stringstr,File newFile){
FileOutputStream fos=null;
try {
fos=newFileOutputStream(newFile);
fos.write(str.getBytes());//?????????
fos.flush();
System.out.println("写入新文件成功");
} catch (FileNotFoundExceptione) {
e.printStackTrace();
} catch (IOExceptione) {
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
四:字符流
输出字符流
输入字符流
问题1.为什么先关闭缓冲流再关闭字节流?
因为缓冲流是基于字节流的,缓冲流位于JVM中,先把字节存到自己里面再通过字节流到文件的东西
2.为什么写入时要刷新?
因为需要把缓冲流的东西写入文件