Java基础之IO
File类
File文件类只能对文件本身操作,不能对文件中的内容进行操作。
public File(String pathname);构造方法。
boolean createNewFile() throws IOException; 创建新的文件
boolean mkdir() 创建目录
boolean mkdirs() 创建多层目录
boolean delete():删除文件或目录
Boolean exists():判断文件或目录是否存在。
boolean isFile(): 判断是否为文件
boolean isDirectory():判断是否为目录
String[] list(): 列出指定目录下所有的文件或文件夹的名称。
File[] listFile(): 列出指定目录下所有文件或目录对象。
String getName():得到文件或目录的名称
String getPath():得到文件或目录的相对路径.
String getAbsolutePath():得到文件或目录的绝对路径
编写一个方法遍历某个目录下所有的文件。(面试题) 一定要用方法的递归(方法内部调用自己)。
//列出指定目录下所有的文件
public static void fun(File file){//要查询的目录
//判断file是目录还是文件
if(file.isFile()){
System.out.println("该文件所在的绝对路径:"+file.getAbsolutePath());
}else{
//2.获取该目录下所有子文件和子目录对象
File[] childFiles=file.listFiles();
if(childFiles!=null){
for(File f:childFiles){//a b a.txt
fun(f); //调用方法自己
}
}
}
}
1.上面的File类只能对文件进行操作,不能对文件中的内容进行操作。
使用IO流来对文件中的内容进行操作。都是站在程序的角度。
1.根据流的方法分为:
输入流和输出流
2.根据读取的单位。
字节流和字符流
1.字符输入流Reader和字符输出流Writer。 通过文件发现这两个类都是抽象类,该类无法实例化对象,找它的子类FileReader。
FileReader(File file);
FileReader(String path);
2.FileReader 字符输入流。读取文件的内容以字符的形式来读取。
File file=new File("D://a.txt");
FileReader fr=new FileReader(file);
int i=fr.read();//每次读取一个字符,返回读取的字符对应的ASSIC值。
while(i!=-1){
char c=(char)i;
System.out.println(c);
i=fr.read();
}
3.以字符数组的方式来读取
File file=new File("D://a.txt");
FileReader fr=new FileReader(file);
char[] cs=new char[1000];
int i=fr.read(cs);//
while(i!=-1){
String str=new String(cs,0,i);//把cs字符数组转化为字符串,从数组中第一个元素,转化i个字符
System.out.println(str);
i=fr.read(cs);
}
4.Writer:FileWriter();字符输出流,通过程序向文件写入内容
File file=new File("D://a.txt");
FileWriter fw=new FileWriter(file,true); //没有自动会建。 true:是否运行追加
String str="I am fine\n";
fw.write(str); //
//fw.flush();//刷新FileWrite中内容。
fw.close();
字节流:
InputStream 和 OutputStream 这两个类为字节输入和输出的父类。这两个类也是抽象类。这两个类不能创建对象,需要使用子类来完成。
FileInputStream FileOutputStream
FileOutputStream:字节输出流
File file=new File("D://d.txt");
FileOutputStream fos=new FileOutputStream(file,true);//字节输出流
String str="你好!玛德";
byte[] b=str.getBytes();//把str转化为字节数组
fos.write(b);//write(byte[] b)
fos.close();//关闭
FileInputStream:字节输入流
File file=new File("D://d.txt");
FileInputStream fis=new FileInputStream(file);
byte[] bytes=new byte[10];
int i= fis.read(bytes);
while(i!=-1){
String str=new String(bytes,0,i);
System.out.println(str);
i=fis.read(bytes);
}
fis.close();
处理流:
字符的处理流:
BufferedWriter字符输出的处理流
BufferedWriter:字符输出的处理流
BufferedWriter(Writer out) :这是它的构造方法。
FileWriter fw=new FileWriter("D://c.txt");
BufferedWriter bw=new BufferedWriter(fw,true); //升级。
bw.write("Hello Word");
bw.flush();
bw.newLine(); //产生换行,可以应用于任何系统。
bw.close();
BufferedReader字符输入的处理流
Reader r=new FileReader("笔记.txt");
BufferedReader br=new BufferedReader(r);
String line=br.readLine();// 可以读取一行。
while(line!=null){
System.out.println(line);
line=br.readLine();
}
br.close();
字节的缓存流:
BufferedOutputStream:字节输出流的缓存流。
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D://e.txt"));
String str="Hello Good";
byte[] bytes=str.getBytes();
bos.write(bytes);
bos.close();
BufferedInputStream:字节输入流的缓存流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D://e.txt"));
byte[] b=new byte[20];
int i= bis.read(b);
while(i!=-1){
String str=new String(b,0,i);
System.out.println(str);
i= bis.read(b);
}
bis.close();
对象流:
对象流:(重要) 通过该流可以把Java中的对象进行保存(文件,云盘,网络上)。
ObjectInputStream 和 OjbectOutputSteam:
序列化(Serialize): 用ObjectOutputStream类将一个Java对象通过IO流写入到数据源中
public static void main(String[] args) throws Exception
{
OutputStream os=new FileOutputStream("D://a.txt");
ObjectOutputStream oos=new ObjectOutputStream(os);
//注意:该类People 必须实现Serializable接口。
// 该类中所有要序列化的属性的类型必须也实现Serializable接口
People p=new People("张三",19);
oos.writeObject(p); //把一个对象通过ObjectOutputStream写入到数据源
oos.close();
os.close();
}
反序列化(Deserialize):用ObjectInputStream类从数据源中恢复该Java对象。
public static void main(String[] args) throws Exception
{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D://a.txt"));
Object o=ois.readObject(); //获取该文件中的对象
People p=(People)o; //向下转型
System.out.println(p.getName()+"=====>"+p.getAge()+"----->");//toString();
ois.close();
}