Java之文件操作和IO

新绿MEHO 2024-08-25 17:35:04 阅读 82

目录

File类

属性

构造方法

方法  

文件内容的读写

InputStream

OutputStream


File类
属性
修饰符及类型 属性 说明
static String pathSeparator 依赖于系统的路径分隔符,String类型的表示
static char pathSeparator 依赖于系统的路径分隔符,char类型的表示

  

构造方法
签名 说明
File(File parent,String child) 根据父目录+孩子文件路径,创建一个新的File实例
File(String pathname) 根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径
File(String parent,String child) 根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示

方法  
修饰符及方法返回值类型 方法签名 说明
String getParent() 返回File对象的父目录文件路径
String getName() 返回File对象的纯文件名称
String getPath() 返回File对象的文件路径
String getAbsolutePath() 返回File对象的的绝对路径
String getCanonicalPath() 返回File对象的修饰过的绝对路径
boolean exists() 判断File对象描述的文件是否真实存在
boolean isDirectory() 判断File对象代表的文件是否是一个目录
boolean isFile() 判断File对象代表的文件是否是一个普通文件
boolean createNewFile() 根据File对象,自动创建一个空文件,成功创建后返回true
boolean delete() 根据File对象,删除该文件,成功删除后返回true
void deleteOnExit() 根据File对象,标注文件将被删除,删除动作会到JVM运行结束后才会进行
String[] list() 返回File对象代表的目录下的所有文件名
File[] listFiles() 返回File对象代表的目录下的所有文件,以File对象表示
boolean mkdir() 创建File对象代表的目录
boolean mkdirs() 创建File对象代表的目录,如果必要,会创建中间目录
boolean renameTo(Filedest) 进行文件改名,也可以视为剪切,粘贴操作
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite()

判断用户是否对文件有可写权限

代码示例1

<code>public class demo1 {

public static void main(String[] args) throws IOException {

File f=new File("./test.txt");

System.out.println(f.getParent());

System.out.println(f.getName());

System.out.println(f.getPath());

System.out.println(f.getAbsolutePath());

System.out.println(f.getCanonicalPath());

}

}

运行结果

代码示例2

<code>public class demo2 {

public static void main(String[] args) throws IOException {

File file=new File("d:/test.txt");

System.out.println(file.exists());

System.out.println(file.isDirectory());

System.out.println(file.isFile());

//创建文件

boolean ret=file.createNewFile();

System.out.println("ret = "+ret);

System.out.println(file.exists());

System.out.println(file.isDirectory());

System.out.println(file.isFile());

}

}

运行结果

代码示例3

<code>public class demo3 {

public static void main(String[] args) throws InterruptedException {

File f=new File("d:/test.txt");

// boolean ret=f.delete();

// System.out.println("ret = "+ret);

f.deleteOnExit();

Thread.sleep(5000);

System.out.println("进程结束");

}

}

第二种删除方式是进程运行结束后才删除。

代码示例4

public class demo4 {

public static void main(String[] args) {

File f=new File("d:/");

String[] files=f.list();

System.out.println(Arrays.toString(files));

}

}

运行结果

代码示例5

<code>public class demo5 {

public static void main(String[] args) {

File f=new File("d:/aaa/bbb/ccc");

// boolean ret=f.mkdir();

boolean ret=f.mkdirs();

System.out.println("ret = "+ret);

}

}

运行结果

文件内容的读写
InputStream

方法

修饰符及返回值类型 方法签名 说明
int read() 读取一个字节的数据,返回-1代表已经完全读完了
int read(byte[] b) 最多读取b.length字节的数据到b中,返回实际独到的数量,-1代表读完了
int read(byte[] b,int off,int len) 最多读取len-off字节的数据到b中,放在从off开始,返回实际独到的数量,-1代表读完了
read close() 关闭字节流

InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用 FileInputStream 。

FileInputStream

签名 说明
FileInputStream(File file) 利用File构造文件输入流
FileInputStream(String name) 利用文件路径构造文件输入流

代码示例1

<code>public class demo9 {

public static void main(String[] args) {

try(InputStream inputStream=new FileInputStream("d:/test.txt")){

byte[] buffer=new byte[1024];

int n=inputStream.read(buffer);

System.out.println("n = "+n);

for (int i = 0; i < n; i++) {

System.out.printf("%x\n",buffer[i]);

}

} catch (FileNotFoundException e) {

throw new RuntimeException(e);

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

 运行结果

代码示例2

<code>public class demo11 {

public static void main(String[] args) {

try(InputStream inputStream=new FileInputStream("d:/test.txt")){

Scanner scanner=new Scanner(inputStream);

String s=scanner.next();

System.out.println(s);

} catch (FileNotFoundException e) {

throw new RuntimeException(e);

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

  运行结果

OutputStream

方法

修饰符及返回值类型 方法签名 说明
void write(int b) 写入一个字节的数据
void write(byte[] b) 将b这个字节数组中的数组全部写入OS
int write(byte[] b,int off,int len) 将b这个字节数组中从off开始的数据写入OS,一共写len个
void close() 关闭字节流
void flush()

重要:我们知道

I/O

的速度是很慢的,所以,大多的

OutputStream

为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的

一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写

入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的

数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,

调用

flush

(刷新)操作,将数据刷到设备中。

 OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 FileOutputStream。

代码示例1

<code>public class demo10 {

public static void main(String[] args) {

try(OutputStream outputStream=new FileOutputStream("d:/test.txt",true)) {

String s="你好世界";code>

outputStream.write(s.getBytes());

} catch (FileNotFoundException e) {

throw new RuntimeException(e);

} catch (IOException e) {

throw new RuntimeException(e);

} ;

}

}

运行结果

代码示例2

<code>public class demo12 {

public static void main(String[] args) {

try(OutputStream outputStream=new FileOutputStream("d:/test.txt")){

PrintWriter writer=new PrintWriter(outputStream);

writer.println("hello");

writer.flush();

} catch (FileNotFoundException e) {

throw new RuntimeException(e);

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

运行结果

代码示例3

删除指定目录下的指定关键词的文件

<code>public class demo13 {

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

System.out.println("请输入要扫描的路径");

String path=scanner.next();

File rootPath=new File(path);

if(!rootPath.isDirectory()){

System.out.println("输入的路径有误");

return;

}

System.out.println("请输入要删除文件的关键词");

String word=scanner.next();

scanDir(rootPath,word);

}

private static void scanDir(File rootPath,String word){

File[] files=rootPath.listFiles();

if(files==null)

return;

for (File f:files) {

System.out.println("当前扫描的文件:"+f.getAbsolutePath());

if(f.isFile())

checkDelete(f,word);

else

scanDir(f,word);

}

}

private static void checkDelete(File f,String word){

if(!f.getName().contains(word))

return;

System.out.println("当前文件为:"+f.getAbsolutePath()+",请确认是否删除");

Scanner scanner=new Scanner(System.in);

String choice=scanner.next();

if(choice.equals("Y") || choice.equals("y")){

f.delete();

System.out.println("删除完毕");

}else{

System.out.println("取消删除");

}

}

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。