java基础-文件与IO
以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16772853.html
IO是一个庞大的体系,信息传递的通道靠IO,例如:文件读写、上传下载、网络通信等都要用到。
1.File类的基本概念
File类:表示文件和目录路径名的抽象表示形式
File类可以实现文件的创建、删除、重命名、得到路径、创建时间等等。是唯一与文件本身有关的操作类
File类的操作方法
Method | 说明 |
---|---|
public static final String separator | 表示路径分隔符“ \\ ” |
public File(String pathname) | 构造File类实例,要传入路径 |
public boolean createNewFile() | 创建新文件 |
public boolean delete() | 删除文件 |
public boolean isDirectory() | 判断给定的路径是否是文件夹 |
public boolean isFIle() | 判断给定的路径是否是文件 |
public String[] list() | 列出文件夹中的文件 |
public File[] listFiles() | 列出文件夹中的所有文件 |
boolean mkdir() | 创建新的文件夹 |
public boolean renameTo(File dest) | 为文件重命名 |
public long length() | 返回文件大小 |
String getPath() | 路径名字符串 |
/**
File类的使用
*/
public static void main(String[] args){
//File类表示一个文件或目录
//“c:\\\\test\\\\vince.txt\"
//\"c:/test/vince.txt\"
File f1 = new File(\"C:/test/vince.txt\");
if(!f1.exists()){
//判断f1指向的文件是否存在
try{
f1.createNewFile();//创建文件
System.out.println(\"文件创建成功\")
}catch(IOException e){
e.printStackTrace();
}
}
//f1.isFile()是否为文件
System.out.println(\"是否为文件夹:\"+f1.isDirectory());
File f2 = new File(\"c:\\\\test\\\\my\");
boolean b = f2.delete();//delete()只能删除空文件夹
System.out.println(b);
String[] names = f2.list();//列出当前目录下的所有文件名
System.out.println(Arrays.toString(names);
File[] fs = f2.listFiles();//列出当前目录下的所有文件,以file对象返回
for(File f : fs){
System.out.println(\"length=\"+f.length());
System.out.println(\"name=\"+f.name());
System.out.println(\"相对路径path=\"+f.path());
System.out.println(\"绝对路径getAbsolutePath=\"+f.getAbsolutePath());
System.out.println(\"是否为隐藏文件=\"+f.isHidden());
System.out.println(\"是否可读文件=\"+f.canRead());
System.out.println(\"文件最后修改的时间=\"+f.lastModified());
System.out.println(\"-------------“);
}
File f3 = new File(\"temp.txt\");
System.out.println(f3.getPath());
System.out.println(f3.getAbsolutePath());
File f4 = new File(\"c:\\\\test\\\\dabin\");
f4.mkdirs();
//重命名与移动文件
//f4.renameTo(new File(\"C:\\\\test\\\\dabin1\"))
f4.renameTo(new File(\"c:\\\\dabin1\"));
File f5 = new File(\"c:\\\\test\\\\my\");
// File[] files = f5.listFiles(new FileFilter(){
// public boolean accept(File pathname){
// return pathname.getName().endsWith(\".txt\");
// }
// }) ;
File[] files = f5.listFiles((pathname)->pathname.getName().endsWith(\".txt\"));
System.out.println(\"-------\");
for(File f: files){
System.out.println(f.getName());
}
}
示例
/**
在指定的目录中查找文件
*/
public class FileDeom2{
public static void main(String[] args){
findFile(new File(\"c:\\\\Users\\\\vince\\\\Downloads\"),\".jpg\");
}
//查找文件的方法
private static void findFile(File target,String ext){
if(target==null)return;
//如果文件是目录
if(target.isDirectory()){
File[] files = target.listFiles();
if(files!=null){
for(File f : files){
findFile(f,ext);//递归调用,一层层找,层数太深,会溢出
}
}
}else{
//此处表示File是一个文件
String name = target.getName().toLowerCase();
if(name.endsWith(ext)){
System.out.println(target.getAbsolutePath());
}
}
}
}
2.字节流
2.1 IO流概述
IO流:输入输出流(Input/Output)
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
2.2 IO流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
字节是数据传输的基本单位,文件内容以字节为单位存储
读文件叫输入流,从文件中把数据读到程序使用输入流
写文件叫输出流,从程序中把数据写到文件使用输出流
2.3 字节输出流
OutputStream类定义
-
public abstract class **OutputStream**extends Object implements Closeable,Flushable
此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到InputStream类某个接收器,要向文件中输出,使用FileOutputStream类
2.4 字节输入流
InputStream定义:
-
public abstract class **InputStream**extends Object implements Closeable
此抽象类是表示字节输入流的所有类的超类
FileInputStream从文件系统中的某个文件中获得输入字节
/**
字节输出输入流
输出流:超类OutputStream,对文件的输出流使用子类FileOutputStream
输入流:超类InputStream,对文件的输入流使用子类FileInputStream
*/
public class ByteStreamDemo{
private static void in\\(){
//1、确定目标文件
File file = new File(\"c:\\\\test\\\\vince.txt\");
//2.构建一个文件输入流对象
try{
InputStream in = new FileInputStream(file);
//3.声明StringBuilder
StringBUilder buf = new StringBuilder();
//4.声明数组和长度
byte[] bytes = new byte[1024];//1024个字节
int len = -1 ;//表示每次读取的字节长度,-1表不存在
//5.把数据读入到数组中并返回读取的字节数,当不等-1时,表示读取到数据,等于-1表示文件已经读完
while(len = in.read(bytes)!= -1 ){
//6.根据读取到的字节数组,再转换为字符串内容,添加到StringBilder中
buf.append(new String(bytes));
}
//7.打印内容
System.out.println(buf);
//8.关闭输入流
in.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
private static void out(){
//1、确定目标文件
File file = new File(\"c:\\\\test\\\\vince.txt\");
//2.构建一个文件输出流对象
try{
OutputStream out = new FileOutputStream(file);//每一次执行会覆盖
//OutputStream out = new FileOutputStream(file,true);//append为true表示追加内容
//3.输出的内容是
String info = \"疑是银河落九天\\r\\n\";//在windows里\'\\r\\n\'表示换行
//String line = System.getProperty(\"line.separator\");//获取换行符
//4.把内容写入到文件
out.write(info.getBytes())//不能传字符,要转换成字节
//5.关闭流
out.close();
System.out.println(\"write success...\");
}catch (FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
out();
in();
}
}
有待补充.......
2022-10-09 17:07:42
来源:https://www.cnblogs.com/lyh1024/p/16772853.html
本站部分图文来源于网络,如有侵权请联系删除。