IO流技术
导入IO包
对文件或者流进行操作,则必须显式地声明如下语句:import java.io.*;
File类介绍
1、File类的对象不但可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录。
2、当创建一个文件对象后,就可以利用它来对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等等。
3、需要注意的是,File对象并不能直接对文件进行读/写操作。
File类的构造方法
1、在当前目录下创建一个与aaa.txt文件名相关联的文件对象。
File f1 = new File("aaa.txt");
2、指明详细的路径以及文件名,请注意双斜线。
File f2 = new File("D:\\Java\\Hello.java");
File类中的常用方法
boolean exists() 判断文件是否存在,存在返回true,否则返回false
boolean isFile() 是否为文件,是文件返回true,否则返回false
boolean isDirectory() 是否为目录,是目录返回true,否则返回false
String getName() 获得文件的名称
String getAbsolutePath() 获得文件的绝对路径
long length() 获得文件的长度(字节数)
boolean createNewFile() throws IOException 创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉
boolean delete() 删除文件,删除成功返回true,否则返回false
String[] list() 返回文件夹内的子文件与子文件夹名称的数组
File[] listFiles() 文件夹内的子文件与子文件夹的数组
Problem
资源管理器
设计一个用于显示指定目录下所有文件与文件夹的资源管理器类
要求包括:
(1)从命令行输入一个路径,如果存在,将该目录下所有的文件和文件夹列名称举出来
(2)如果不存在则输出不存在该路径
package chap;
import java.io.*;/*导入文件包*/
import java.util.Scanner;
public class Chao {
public static void main(String...strings){
String string;
Scanner scanner = new Scanner(System.in);
string = scanner.nextLine();/*输入路径*/
File file = new File(string);/*该路径下的文件*/
if(file.exists())/*文件存在*/{
show(file);
}else{
System.out.println("不存在!");
}
}
private static void show(File file) {
if(file.isDirectory()){
if(file.listFiles()!=null){
for(File sub : file.listFiles()){
/*file.listFiles()返回文件夹内的子文件与子文件夹的数组*/
System.out.println(sub.getAbsolutePath());
}
}
}
}
}
FileInputStream
package chap;
import java.io.*;
public class FileInputStreamDemo1 {
public static void main(String[] args) throws IOException{
File file = new File("src/chap/FileInputStreamDemo1.java");//创建文件对象
//创建文件输入流对象
FileInputStream fis = new FileInputStream(file);
for(int i=0; i<file.length(); i++){
char ch = (char)(fis.read());//循环读取字符
System.out.print(ch);
}
System.out.println();
fis.close();//关闭流
}
}
package chap;
import java.io.*;
public class FileInputStreamDemo2{
public static void main(String[] args)throws Exception{
File file = new File("src/chap/FileInputStreamDemo2.java"); //创建文件对象
FileInputStream fis = new FileInputStream(file);
//根据文件的字节长度创建字节数组
byte[] buf = new byte[(int)(file.length())];
fis.read(buf); //读取文件数据存放到字节数组中
String str = new String(buf); //用字节数组创建字符串
System.out.println(str); //打印字符串
fis.close(); //关闭流
}
}
FileOutputStream
package chap;
import java.io.*;
public class FileOutputStreamDemo1 {
public static void main(String[] args) throws IOException{
String str="Hello world!";
File file = new File("D:\\test.txt");
FileOutputStream fos = new FileOutputStream(file,true);
/*FileOutputStream(File,boolean)确认是否将文件中的内容被输出流中的内容覆盖。这里的append为true就是在文件末尾添加内容,为false就是覆盖。*/
for(int i=0; i<str.length(); i++){
fos.write(str.charAt(i));
/*charAt(i)是获取字符串中i位置的字符*/
}
fos.close();
}
}
package chap;
import java.io.*;
public class FileOutputStreamDemo2 {
//在函数内部不进行异常处理,将异常抛出函数外部
public static void main(String[] args) throws Exception {
String str = "I Love Java";
//通过文件名创建文件输出流对象
FileOutputStream fos = new FileOutputStream("D:\\test.txt");
byte[] buffer = str.getBytes();
//将字节数组中包含的数据一次性写入到文件中
fos.write(buffer);
//将字符串转化为字节数组
fos.close();
}
}
剪切实现
package chap;
import java.io.*;
public class Copycut {
public static void main(String[] args) throws IOException{
String source,dest;
source = "D:\\test.txt";
dest = "D:\\text.txt";
Copy1(source,dest);
Cut(source);
}
private static void Copy1(String source, String dest) throws IOException{
File file = new File(source);
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(dest);
for(int i=0; i<file.length(); i++){
fos.write(fis.read());
}
fis.close();
fos.close();
}
private static void Cut(String source) throws IOException{
File file = new File(source);
file.delete();
}
}