IO流是数据传输的通道,io流根据操作数据的类型又可以分为字符流和字节流。以内存为参照物,读取内存上的内容叫做输入流,往内存上写内容叫做输出流。
File类:
文件和目录路径的抽象表示形式。
java把电脑中的文件和文件夹(目录)封装为一个File类,我们可以使用File类对文件和文件夹进行操作。
路径:
路径分为绝对路径和相对路径。绝对路径是以盘符(C: D: ……)开始的路径。
而相对路径是一个简化的路径。相对指的是相对于当前项目的根目录。
构造方法:
1、File(String pathname)通过将给定路径名字字符串转换为抽象路径来创建一个新的File实例。
2、File(String parent,String child):根据parent路径字符串和child路径字符串创建一个新的File实例。
3、File(File parent, String child):根据parent的抽象路径和child路径字符串创建一个新的File实例。
常用方法:
public String getAbsolutePath():获取绝对路径。
public String getPath():获取对象的相对路径。
public long length():返回此File表示的文件长度。
public boolean exists():File是否存在
public boolean isDirectory():判断对象是否是目录
public boolean isFile():此File表示的是否是是文件。
public boolean creatNewFile():当且仅当具有该名称的文件夹尚不存在时创建一个新的空文件。
public boolean mkdirs():既可以创建单级文件夹也可以创建多级文件夹。
public boolean delete():删除当前文件或目录
public String[ ] list():返回一个String数组,表示该File目录中的所有子文件。
public File[ ] listFiles():返回一个File数组,表示该文件夹中的所有文件。
综合训练:遍历指定文件中的所有目录和文件:
public class PrintAllFiles {
public static void lookup(String path){
File f = new File(path);
if(!f.exists()){
System.out.println("路径不存在");
return;
}
System.out.println(path);
if(f.isFile()){
return;
}
File[] file = f.listFiles();
if(file == null||file.length==0)return;
for (File fl : file) {
lookup(fl.getPath());
}
}
public static void main(String[] args) {
lookup("D:\\QQ\\03-Java高级API\\06-输入和输出处理(一)");
File f = new File("jj");
}
}
字节输入流:
父类:InptuStream
常用子类:FileInputStream。构造方法:FileInputStream(File f),FileInputSteam(String fileName)
常用方法:
read():读取文件的第一个字节,返回这个字节的值,如果到到达文末,那么返回-1。
read(byte[ ] b):每次至多读取一个数组的长度。
available()返回值是还没有被读取的剩余字节数。
close():关闭流并释放资源。
假设现在项目根目录下有一个“a.txt”文件,内容是“I am a Superman!”
字节流读取:
FileInputStream fis = new FileInputStream("a.txt");
int i;
while ((i = fis.read()) != -1){
System.out.print((char)i);//I am a Superman!
}
fis.close();
字符流读取:
FileInputStream fis = new FileInputStream("a.txt");
byte[] b = new byte[fis.available()];
fis.read(b);
System.out.println(Arrays.toString(b));
fis.close();
结果:
输入输入流训练,将指定文件的复制到另一个文件中:
public class Exercise2 {
public static void writeFile(String path,String s) throws IOException {
FileOutputStream fos = new FileOutputStream(path);
byte[] b = s.getBytes();
fos.write(b);
fos.close();
}
public static String readFile(File path) throws IOException{
FileInputStream fis = new FileInputStream(path);
byte[] b = new byte[fis.available()];
fis.read(b);
fis.close();
return new String(b);
}
public static void main(String[] args) throws IOException {
File f = new File("D:/我的青春谁做主");
f.getParentFile().mkdirs();
if(!f.exists()){
f.createNewFile();
}
//往青春谁做主中写入内容。
String text= "你的青春我做主,You belong to me!";
writeFile(f.getAbsolutePath(),text);
String s = readFile(f);
File f1 = new File("C:/myFile/my Prime.txt");
f1.getParentFile().mkdirs();
if(!f1.exists())f1.createNewFile();
writeFile(f1.getAbsolutePath(),s);
}
}