JAVA学习(八):JAVA文件编程

简介: <p>本博文主要介绍JAVA文件编程,主要包括通过JDK提供的I/O来从文件读取和写入数据、字节流读写文件的方法、字符流读写文件的方法、如何使用File类创建、删除和遍历文件与目录等操作。</p> <p><br></p> <p>不管是C/C++还是JAVA,都可能生成一些持久性数据,我们可以将数据存储在文件或数据库中,但是对于一些简单性的数据,如果存储在数据库中,则会显得有点得不偿失了

本博文主要介绍JAVA文件编程,主要包括通过JDK提供的I/O来从文件读取和写入数据、字节流读写文件的方法、字符流读写文件的方法、如何使用File类创建、删除和遍历文件与目录等操作。


不管是C/C++还是JAVA,都可能生成一些持久性数据,我们可以将数据存储在文件或数据库中,但是对于一些简单性的数据,如果存储在数据库中,则会显得有点得不偿失了,那么,如何在JAVA中将数据存储在文件中就成了中小型程序必须掌握的基本技能了。


下面一一讲解File类简介与文件的创建、删除、重命名,文件夹的创建、重命名、删除,文件属性的读取,文件属性的设置,遍历文件夹,文件的简单读写,并且都给出示例代码。


1、File类简介与文件的创建、删除、重命名


主要内容包括File类,File类用来代表文件或文件夹,通过File类,可以对文件与文件夹执行丰富的操作,并且可以获取文件的路径、大小、文件名等信息;通过文件类的creatNewFile()方法创建文件,通过delete()方法删除文件,使用renameTo()方法重命名文件。

import java.io.File;
import java.io.IOException;

public class HelloFile {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file = new File("hello.txt");			//默认存在相对路径下,即该工程下
//		File file = new File("bin/hello.txt");		//文件存在于指定的绝对路径下
//		File file = new File("../hello.txt");		//文件存在于该工程路径的上一级
//		File file = new File("../../hello.txt");	//文件存在于该工程路径的上一级的上一级
		//判断文件是否存在
		if(file.exists())
		{
			//打印“文件”属性
			System.out.println(file.isFile());
			//打印“路径(文件夹)”属性
			System.out.println(file.isDirectory());
			
//			//同目录重命名
//			File nameto = new File("NewHello.txt");
//			file.renameTo(nameto);
			
//			//跨目录重命名
//			//注意1:文件夹结构必须处于同一个分区
//			//注意2:文件若处于不同的分区,需要使用文件的拷贝,而不是重命名
//			File nameto = new File("src/NewHello.txt");
//			file.renameTo(nameto);		
			
//			//删除文件
//			file.delete();
//			System.out.println("文件删除成功!");
		}
		else
		{
			System.out.println("文件不存在!");
			try {
				file.createNewFile();
				System.out.println("文件已经成功创建!");
			} catch (IOException e) {
				System.out.println("文件无法创建!");
			}
		}
	}

}



2、文件夹的创建、重命名、删除


主要内容包括通过使用mkdir()与mkdirs()方法创建文件夹,使用delete()方法删除文件夹,使用renameTo()方法重命名文件夹

import java.io.File;

public class HelloFolder {

	public static void main(String[] args) {
		//创建单级文件夹:folder.mkdir()
		File folder1 = new File("MyFolder1");
//		if(folder1.mkdir())
//		{
//			System.out.println("单级文件夹创建完成!");
//		}
//		else
//		{
//			if(folder1.exists())
//			{
//				System.out.println("单级文件夹已经存在,不用创建!");
//			}
//			else
//			{
//			System.out.println("单级文件夹创建失败!");
//			}
//		}
		
		//创建多级文件夹:folder.mkdirs()
		File folder2 = new File("MyFolder2/one/two");
//		if(folder2.mkdirs())
//		{
//			System.out.println("多级文件夹创建完成!");
//		}
//		else
//		{
//			if(folder2.exists())
//			{
//				System.out.println("多级文件夹已经存在,不用创建!");
//			}
//			else
//			{
//			System.out.println("多级文件夹创建失败!");
//			}
//		}
		
//		//文件夹重命名
//		//重命名同一级文件夹
//		File newfolder1 =new File("MyFolder3");
//		if(folder1.renameTo(newfolder1))
//		{
//			System.out.println("Done!");
//		}else{
//			System.out.println("Fail!");
//		}
//		//重命名不同级的文件夹,有点类似于移动,但仍归类于重命名
//		//注意:处于同一分区中
//		File newfolder2 =new File("MyFolder2/two");
//		if(folder2.renameTo(newfolder2))
//		{
//			System.out.println("Done!");
//		}else{
//			System.out.println("Fail!");
//		}
		
		//删除文件夹
		if(folder1.delete())
		{
			System.out.println("删除完成!");
		}else{
			System.out.println("删除失败!");
		}
//		//注意:只能删除空文件夹
//		folder2.delete();
	}

}



3、文件属性的读取


主要内容包括判断文件是否存在、文件名称、路径、文件大小、是否被隐藏、是否可读可写、是否为文件夹等。

import java.io.File;

public class ReadFileProperty {

	public static void main(String[] args) {
		File file = new File("text.txt");
		
		//判断文件是否存在
		System.out.println("文件是否存在"+file.exists());
		
		//读文件名称
		System.out.println("读取文件名称"+file.getName());
		
		//读取文件路径(相对路径)
		System.out.println("读取文件相对路径"+file.getPath());
		
		//读取绝对路径
		System.out.println("读取文件绝对路径"+file.getAbsolutePath());
		
		//读取文件父级路径
		System.out.println("读取文件父级路径"+file.getParent());//返回相对路径的上一级
		System.out.println("读取文件父级路径"+ new File(file.getAbsolutePath()).getParent());//返回绝对路径的上一级
		
		//读取文件大小
		System.out.println("读取文件大小"+file.length()+"byte");
		System.out.println("读取文件大小"+(float)file.length()/1000+"KB");
		
		//判断文件是否被隐藏
		System.out.println("判断文件是否被隐藏"+file.isHidden());
	
		//判断文件是否可读
		System.out.println("判断文件是否可读"+file.canRead());
		
		//判断文件是否可写
		System.out.println("判断文件是否可写"+file.canWrite());
		
		//判断文件是否为文件夹
		System.out.println("判断文件是否为文件夹"+file.isDirectory());
		
	}

}



4、文件属性的设置


主要内容包括将文件设定为可读、可写或只读。

import java.io.File;
import java.io.IOException;

public class SetFileProperty {

	public static void main(String[] args) {
		File file = new File("text.file");
		if(file.exists())
		{
			System.out.println("文件存在,不用创建!");
			
			//先确认文件的属性
			System.out.println("可读吗?"+file.canRead());
			System.out.println("可写吗?"+file.canWrite());
			System.out.println("可执行吗?"+file.canExecute());
			//将文件设定为可写
	//		file.setWritable(false);//true可写false不可写
			
			//将文件设定为可读
	//		file.setReadable(false);//true可读false不可读
			
			//将文件设定为只读
			file.setReadOnly();
			
			//再确认文件的属性
			System.out.println("\n");
			System.out.println("可读吗?"+file.canRead());
			System.out.println("可写吗?"+file.canWrite());
			System.out.println("可执行吗?"+file.canExecute());
			
		}else{
			System.out.println("文件不存在,请创建一个新文件!");
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		
	}

}



5、遍历文件夹


主要内容包括通过使用listFiles()方法获取文件夹中的所有项目,并且通过递归显示完整的层级结构。

package com.hqu.filetraverse.main;

import java.io.File;

public class Traverse {

	public static void main(String[] args) {
		printFiles(new File("/Job/Java/workspace/FileTraverse"),1);//使用绝对路径
//		printFiles(new File("../FileTraverse"),1);//默认使用相对路径
	}
	
	public static void printFiles(File dir,int tab) {
		if(dir.isDirectory())
		{
			File next[] = dir.listFiles();		//返回值是文件和文件夹,存在于数组中
			for(int i=0;i<next.length;i++){
				for(int j=0;j<tab;j++){			//输出|--当做识别层次的标记
					System.out.print("|--");	//使用print而不是println,可以避免每次的换行
				}
				System.out.println(next[i].getName());//打印文件或文件夹的名字
				if(next[i].isDirectory()){
					printFiles(next[i],tab+1);	//递归调用自身
				}
			}
		}
	}

}



6、文件的简单读写


主要内容包括FileInputStream和FileOutputStream的使用方法,实现文本文件的读取和写出。

package com.hqu.rwfile;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class ReadFile {

	public static void main(String[] args) {
		File file = new File("text.txt"); //事先创建好,并输入内容
		if(file.exists()){
//			System.out.println("exit");
			System.err.println("exit");//系统输出
			try {
				
				//准备用于文件输入的三个流
				FileInputStream fis = new FileInputStream(file);//文件的输入流属于字节流
				InputStreamReader isr = new InputStreamReader(fis, "UTF-8");//InputStreamReader属于字符流,"UTF-8"为指定文本编码,防止乱码
				BufferedReader br = new BufferedReader(isr);//带有缓冲区的Reader
				
				String line;	//用于临时存放读取到的数据
				while((line = br.readLine()) != null){
					System.out.println(line);
				}
				
				//关闭输入流
				br.close();
				isr.close();
				fis.close();
				
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
		
		
		File newfile = new File("newtext.txt");//无需创建,写入时系统自动创建文件
		try {
			
			FileOutputStream fos = new FileOutputStream(newfile);
			OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
			BufferedWriter bw = new BufferedWriter(osw);
			
			bw.write("abcd\n");
			bw.write("efgh\n");
			bw.write("ijkl\n");
			bw.write("mnop");
//			bw.write("长歌行 汉乐府");
//			bw.write("青青园中葵,朝露待日晞。\n");
//			bw.write("阳春布德泽,万物生光辉。\n");
//			bw.write("常恐秋节至,焜黄华叶衰。\n");
//			bw.write("百川东到海,何时复西归?\n");
//			bw.write("少壮不努力,老大徒伤悲!\n");
			
			bw.close();
			osw.close();
			fos.close();
			
			System.out.println("写入完成!");
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}



目录
相关文章
|
9天前
|
Kubernetes 负载均衡 Java
k8s的出现解决了java并发编程胡问题了
Kubernetes通过提供自动化管理、资源管理、服务发现和负载均衡、持续交付等功能,有效地解决了Java并发编程中的许多复杂问题。它不仅简化了线程管理和资源共享,还提供了强大的负载均衡和故障恢复机制,确保应用程序在高并发环境下的高效运行和稳定性。通过合理配置和使用Kubernetes,开发者可以显著提高Java应用程序的性能和可靠性。
57 31
|
10天前
|
Java 编译器 开发者
注解的艺术:Java编程的高级定制
注解是Java编程中的高级特性,通过内置注解、自定义注解及注解处理器,可以实现代码的高度定制和扩展。通过理解和掌握注解的使用方法,开发者可以提高代码的可读性、可维护性和开发效率。在实际应用中,注解广泛用于框架开发、代码生成和配置管理等方面,展示了其强大的功能和灵活性。
60 25
|
2天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
2天前
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
24天前
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
29 4
|
1月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
12天前
|
Java 开发工具
课时6:Java编程起步
课时6:Java编程起步,主讲人李兴华。课程摘要:介绍Java编程的第一个程序“Hello World”,讲解如何使用记事本或EditPlus编写、保存和编译Java源代码(*.java文件),并解释类定义、主方法(public static void main)及屏幕打印(System.out.println)。强调类名与文件名一致的重要性,以及Java程序的编译和执行过程。通过实例演示,帮助初学者掌握Java编程的基本步骤和常见问题。
|
2月前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
43 10
|
2月前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
182 4
|
2月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
44 4

热门文章

最新文章