文件可认为是相关记录或放在一起的数据的集合。
JAVA通过File类来访问文件属性
File类的常用方法
boolean exists( ) 判断文件或目录是否存在
boolean isFile( ) 判断是否是文件
boolean isDirectory( ) 判断是否是目录
String getPath( ) 返回此对象表示的文件的相对路径名
String getAbsolutePath( ) 返回此对象表示的文件的绝对路径名
String getName( ) 返回此对象表示的文件或目录的名称
boolean delete( ) 删除此对象指定的文件或目录
boolean createNewFile( )
创建名称的空文件,不创建文件夹
long length() 返回文件的长度,单位为字节,
如果文件不 存在,则返回 0L
案例:
public static void main(String[] args) throws IOException {
//File 是文件和目录径名的抽象表示
//文件和目录是可以通过File封装成对象的 封装的并不是真正的文件,是路径名而已、可以存在,也可以不存在。
//将来是要通过具体的操作吧这个路径的内容转化为具体存在的
// String pathname 通过给定的路径名字付串转化为抽象路径名来创建新的File实例
File file=new File("D:\\JAVA\\itcast\\java.txt");
System.out.println(file);
File file1=new File("D:\\JAVA\\itcast","java.txt");
System.out.println(file1);
File file2=new File("D:\\JAVA\\itcast");
File file3=new File(file2,"java.txt");
System.out.println(file3);
//File类的创建功能
// 创建会显示true,创建过后再次输出的话会输出false 返回的是boolean类型 创建了文件java.txt
//createNewFile 方法
File file4=new File("D:\\JAVA\\itcast\\java.txt");
System.out.println(file4.createNewFile());
// 创建会显示true,创建过后再次输出的话会输出false 返回的是boolean类型 创建目录 javaSE
//mkdir 方法
File file5=new File("D:\\JAVA\\itcast\\JavaSE");
System.out.println(file5.mkdir());
// 创建会显示true,创建过后再次输出的话会输出false 返回的是boolean类型 创建目录 javaSE
//mkdirs 创建多级目录
File file6=new File("D:\\JAVA\\itcast\\JavaSEE\\javasee");
System.out.println(file6.mkdirs());
// 创建会显示true,创建过后再次输出的话会输出false 返回的是boolean类型 创建目录 javaSE
//注意路径的是文件,还是目录 ,不管是目录还是文件都只能存在一个名字一样的
File file7=new File("D:\\JAVA\\itcast\\Javasess.txt");
System.out.println(file7.createNewFile());
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//判断和获取方法
//isDirectory File是否为目录 ; isFile是否为文件 ; exists File是否存在
File file8=new File("D:\\JAVA\\itcast\\java1.txt");
System.out.println(file8.isDirectory()); //false
System.out.println(file8.isFile()); //true
System.out.println(file8.exists()); //true
//getAbsolutePath 返回此抽象路径的绝对路径字符串 ;getPath 返回创建Flile对象时的路径 ;getName 返回此抽线路径表示的文件或者目录名称
System.out.println(file8.getAbsolutePath());
System.out.println(file8.getPath()); //输出文件名称
System.out.println(file8.getName());//文件名 java1.txt
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//oubic String [] list显示路径表示的目录中的文件和目录的名称字符串数组
//
File file9=new File("D:\\JAVA\\itcast");
String[] strArray = file9.list(); //ctrl+alt+v 补全的代码
for (String str:strArray){
System.out.println(str);
}
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
File[] fileArray = file9.listFiles();
for (File file01:fileArray){
// System.out.println(file01);//返回绝对路径
// System.out.println(file1.getName());//返回路径文件和目录的名称和上方的String[]list方法返回的是一样的东西。但是这个可以加判断
if (file01.isFile()){ //只要文件 换成isFile 只返回文件 isDirectory 只返回目录名称
System.out.println(file01.getName());
}
}
//绝对路径是完整路径,相对流经是不完整的
//\\itcast\\java.txt 会在项目中创建一个文件或者目录
//目录中有内容时,不能直接删除,先删除目录里面的目录或者文件,才可以删除
}
流的基本概念
通过流来读写文件 : 流是指一连串流动的字符,是以先进先出方式发
源数据源------》读到程序 :这种是输入流
程序写道------》目标数据源 : 这是输出流
JAVA流的分类
按流向区分 分为两种 1、inputstream 和 reader作为基类 :输入流
2、outputstream 和 writer作为基类: 输出流
输入输出流是相对于计算机内存来说的
,
而不是相对于源和目标。
按处理数据单元分类分为:字节流分为两种 1、字节流输入流 inputstream为基类
2、字节流输出流 outputstream 为基类
字符流分为两种 1、字符流输入流reader为基类
2、字符流输出流writer为基类
字节流是
8
位通用字节流,字符流是
16
位
Unicode
字符流。
流的分类
功能不同
1、节点流:可以直接从数据源或目的地读写数据。
2、处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作
和提高性能。
节点流和处理流的关系
1、节点流处于io操作的第一线,所有操作必须通过他们进行
2、处理流可以对其他流进行处理(提高效率或操作灵活性)
文件的读写
文本文件的读写
用FileInputStream和FileOutputStream读写文本文件
用BufferedReader和BufferedWriter读写文本文件
二进制文件的读写使用DataInputStream和DataOutputStream读写二进制文件以及基本数据类型
数据的读写
对象的读写
使用ObjectInputStream和ObjectOutputStream读写对象(序列 化与反序列化)
使用FileInputStream 读文本文件顺序
1、引入相关的类
2、
构造文件输入流
FileInputStream
对象
3、
读取文本文件的数据
4、关闭文件流对象
InputStream类常用方法
int read( )
int read(byte[] b)
int read(byte[] b,int off,int len)
void close( )
int available()
子类FileInputStream常用的构造方法
FileInputStream(File file)
FileInputStream(String name)
案列:
public static void main(String[] args) {
File file=new File("c:\\1.txt");
FileInputStream fis=null;
try {
fis=new FileInputStream(file);
int length=0;
while ((length=fis.read())!=-1){
System.out.println(length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用FileOutputStream 写文本文件的顺序
1、引入相关的类
2、构造文件数据
3、流输出对象
4、将数据写入文本文件
5、关闭文件流
6、对象
OutputStream类常用方法
void write(int c)
void write(byte[] buf)
void write(byte[] b,int off,int len)
void close( )
子类FileOutputStream常用的构造方法
FileOutputStream (File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)
1
、前两种构造方法在向文件写数据时将覆盖文件中原有的内容
2
、创建
FileOutputStream
实例时,如果相应的文件并不存在,则会自动创建一个
空的文件
案例:
public static void main(String[] args) throws IOException {
FileOutputStream f1=null;
try {
f1=new FileOutputStream("D:\\JAVA\\itcast\\Fzhang.txt",true);
f1.write("zhang".getBytes());
}catch (IOException e){
e.printStackTrace();
}finally {
if (f1!=null){
try {
f1.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
//最后要释放资源 void close关闭文件输出并释放与此流相关联的任何系统资源
f1.close();
}
public static void main(String[] args) throws IOException {
FileOutputStream f1=null;
try {
f1=new FileOutputStream("D:\\JAVA\\itcast\\Fzhang.txt");
byte[] a = "zhang".getBytes();
f1.write(a);
}catch (IOException e){
e.printStackTrace();
}finally {
if (f1!=null){
try {
f1.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
//最后要释放资源 void close关闭文件输出并释放与此流相关联的任何系统资源
f1.close();
}
复制图片
案例:
private static void methon4(File srcFile, File desFile) throws IOException {
File srcFile = new File("E:\\流浪地球.jpg");
File desFile = new File("C:\\流浪地球.jpg");
// 封装数据源
FileInputStream fi = new FileInputStream(srcFile);
//封装目的地
FileOutputStream fw = new FileOutputStream(desFile);
//复制
int by = 0;
while((by = fi.read()) != -1) {
fw.write(by);
}
//释放资源
fi.close();
fw.close();
}