JAVA文件操作各种流

一、文件操作流(File类)

常用方法:
image.png

1、创建文件

package JAVAIO;
import java.io.File;
import java.io.IOException;
public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator+"test.txt");
		try {
			f.createNewFile();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

image.png
image.png

2、文件删除

package JAVAIO;
import java.io.File;
import java.io.IOException;
public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator+"test.txt");
		if(f.exists()) {
			if(f.delete()) {
				System.out.println("文件删除成功!");
			}
		}
		else {
			try {
				f.createNewFile();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		
	}
}

3、创建文件夹

package JAVAIO;
import java.io.File;
public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator+"A");
		if(f.mkdir()) {
			System.out.println("目录创建成功!");
		}
	}
}

image.png
看码思考:

package JAVAIO;
import java.io.File;
public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator+"A"+File.separator+"B"+File.separator+"C");
		if(f.mkdir()) {
			System.out.println("目录创建成功!");
		}
	}
}

现在已经有了A目录了,然后我想在A目录下新建一个B目录,然后在B目录下新建一个C目录。
但是执行不成功。
image.png
A目录下的 B、C目录没有创建成功!
这时,需要mkdirs
image.png
image.png

mkdirmkdirs的区别:

  • mkdir:只能给创建单目录
  • mkdirs:能递归创建个目录,包括父级目录不存在的目录

4、列出指定目录的全部文件
案例一:

package JAVAIO;
import java.io.File;
public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator);
		String[] files=f.list();
		for(int i=0;i<files.length;i++) {
			System.out.println(files[i]);
		}
	}
}

image.png
案例二:

package JAVAIO;
import java.io.File;
public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator);
		File[] files=f.listFiles();
		for(int i=0;i<files.length;i++) {
			System.out.println(files[i]);
		}
	}
}

image.png
list()和listFiles()的区别

  • list():列出全部名称,返回一个字符串数组(不带路径)。
  • listFiles():列出完整的路径+文件名称,返回一个file对象数组(每个元素都是file对象数组)。

5、判断给定的路径是否是目录

package JAVAIO;
import java.io.File;
public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator);
		if(f.isDirectory()) {
			System.out.println("该路径是一个目录");
		}
		else {
			System.out.println("该路径不是目录");
		}
	}
}

image.png

二、字节流与字符流

image.png
image.png

字节流:操作的是byte数据类型,以byte数组为为准,主要类是OutputStream和InputStream,但这两个类是抽象类,如果要使用必须用其对应的子类:FileOutputSream和FileInputStream类。

1、字节输出流:OutputStream
常用方法:
image.png
案例一:

package lianxi;
import java.io.*;

public class OutputStram {
	public static void main(String[] args) {
		File file=new File("e:"+File.separator+"a"+File.separator+"1.txt");
		String str="My Name is Wangchuang,I from 山东省菏泽市曹县邵庄镇程庄寨村";
		byte[] b = str.getBytes();
		OutputStream out=null;
		try {
			//实例化OutputStream
			out = new FileOutputStream(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			//写入
			out.write(b);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

3.gif
2、字节输入流:InputStream
常用方法:
image.png

package lianxi;
import java.io.*;

public class InputStream_ceshi {
	public static void main(String[] args) {
		InputStream in = null;
//		int len=0;
		File file = new File("e:"+File.separator+"a"+File.separator+"1.txt");
		byte[] b = new byte[(int)file.length()];
		try {
			in = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			in.read(b);
			System.out.println(new String(b));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//将字节数组转为字符串输出
//		System.out.println(new String(b,0,len));
		try {
			in.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

image.png
image.png

字符流:输入和输出时操作的是字符,而不再是字节,写入的类是Writer和Reader,同样这两个类为抽象类,分别对应的子类时FileWriter和FileReader类。

1、字符输出流
image.png
案例一(write(String)将整个字符串写入):

package JAVAIO;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator+"a"+File.separator+"1.txt");
		Writer xie=null;
		String str="红军不怕远征难,万水千山只等闲!";
		try {
			xie = new FileWriter(f,true);
			xie.write(str);	
			xie.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

image.png

案例二(write(char[])将整个字符数组一次性写入):

package JAVAIO;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator+"a"+File.separator+"1.txt");
		Writer xie=null;
		char[] ch= {'早','安','啊','我','的','公','主'};
		try {
			xie = new FileWriter(f,true);
			xie.write(ch);	
			xie.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

image.png

温馨提示:
image.png
2、字符输入流(Reader)
image.png

package JAVAIO;

import java.io.*;


public class File_ceshi {
	public static void main(String[] args) {
		File f = new File("E:"+File.separator+"a"+File.separator+"1.txt");
		Reader read=null;
		int len=0;
		char[] ch=new char[(int)f.length()];
		try {
			read=new FileReader(f);
		}catch(IOException e) {
			e.printStackTrace();
		}
		try {
			len=read.read(ch);
		}catch(IOException e) {
			e.printStackTrace();
		}
		for(int i=0;i<ch.length;i++) {
			System.out.println(ch[i]);
		}
		System.out.println(new String(ch,0,len));
	}
}

image.png

三、打印流

打印流主要用来输出信息,主要包含字节打印流(PrintStream)和字符打印流(PrintWriter)。

1、PrintStream:是OutputStream的子类
常用方法:
image.png

package JAVAIO;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;

public class PrintStreamDemo {
	public static void main(String[] args) {
		//父(OutputStream)-子(FileOutputSteam)-子(printStream)
		File file = new File("e:"+File.separator+"a"+File.separator+"1.txt");
		OutputStream out = null;
		try {
			out = new FileOutputStream(file,true);
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		PrintStream ps = new PrintStream(out);
		try {
			ps.write("早安,我的公主".getBytes());	//将字节数组一次性写入文件,使用的是OutputStream中继承来的方法
			ps.write("I Love You".getBytes(),0,6);	//从下标为0 的第一个字符开始,到下标为6的字符结束。
			ps.write("\r\n".getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
		ps.close();
	}
}
 

image.png
2、PrintWriter

package JAVAIO;
import java.io.*;
public class File_ceshi {
	public static void main(String[] args) throws IOException {
		File file = new File("E:"+File.separator+"a"+File.separator+"1.txt");
		char[] c=new char[(int)file.length()];
		Reader in=new FileReader(file);
		in.read(c);
		String str=new String(c,0,c.length);
		String str1="这头";
		int m,x=0;
		for(int i=0;i<c.length;i++) {
			//如果等于-1就说明文件的内容没有指定的这个字符串,则跳出循环
			m=str.indexOf(str1,i);
			if(m==-1) {
				break;
			}else {
				//在第一次出现的位置上加上指定字符的本身长度(目的就是避免重复增加出现的次数)
				i=m+str1.length();
				x++;
			}
		}
		System.out.println(x);
		in.close();
	}
}

image.png

猜你喜欢

转载自blog.csdn.net/qq_42249896/article/details/88786383
今日推荐