JAVA学习(八):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();
		}
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-11 08:15:46

JAVA学习(八):JAVA文件编程的相关文章

JAVA学习篇--JAVA的两种编程模式对比

在Drp项目中,讲解了两种编程模式Model 1和Model2,下面是对这两种模式的简单理解,以及由于Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对比学习一下. Model1 所谓Model1就是JSP大行其道的时代,在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应.用少量的JavaBean来处理数据库连接.数据库访问等操作. 代码示例:修改用户信息 主页面的js跳转: function

Java学习-010-创建文件夹源代码

此文源码主要为应用 Java 创建文件目录的源码.若有不足之处,敬请大神指正,不胜感激! 创建文件夹源代码如下所示: 1 /** 2 * @function 文件操作:创建文件夹.若文件夹不存在,则级联创建文件夹:若存在则不创建. 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java createPath, 2015-2-2 21:03:31

Java学习-011-创建文件实例及源代码

此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 创建文件的源代码如下所示: 1 /** 2 * @function 文件操作:创建文件.若文件不存在,则直接创建文件:若文件存在且未被占用,则删除文件,并重新创建文件 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java createFile, 2015-2

Java学习-014-文本文件写入实例源代码(两种写入方式)

此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 第一种:文本文件写入,若文件存在则删除原文件,并重新创建文件.源代码如下所示: 1 /** 2 * @function 文本文件操作:写入数据 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java txtWrite, 2015-2-2 21:03

Java学习-013-文本文件读取实例源代码(两种数据返回格式)

此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代码如下所示: 1 /** 2 * @function 文本文件操作:读取数据 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java txtRead, 201

好程序员Java学习路线Java bean是个什么概念

好程序员Java学习路线Java bean是个什么概念,Bean的中文含义是"豆子",顾名思义JavaBean是一段Java小程序.JavaBean实际上是指一种特殊的Java类,它通常用来实现一些比较常用的简单功能,并可以很容易的被重用或者是插入其他应用程序中去.所有遵循一定编程原则的Java类都可以被称作JavaBean.一. Java Bean技术概述??????? Java Bean是基于Java的组件模型,由属性.方法和事件3部分组成.在该模型中,JavaBean可以被修改或

JAVA学习篇--Java类加载

由来: 与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序(解释性语言).当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Javaclass加载到JVM里头运行,负责加载Javaclass的这部分就ClassLoader.中文叫做类加载器. 类加载器就好比一个代理,你需要什么,我通过类加载器将你需要的内容返回给你! 类加载器有什么作用? 当程序需要的某个类,那么需要通过类加载器把类的二进制加载到内存中. 解释: 类加载器也是Java类,因为其他是java类的

[ Java学习基础 ] Java构造函数

构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只能与new运算符结合使用. 示例代码如下: 1 //Rectangle.java文件 2 package com.a51work6; 3 4 // 矩形类 5 public class Rectangle { 6 7 // 矩形宽度 8 int width; 9 // 矩形高度 10 int hei

JAVA学习之路三 编程英文汇总学习

JAVA学习中的每个章节中都有许多英文,不断熟悉工作英语也是提高编程能力很重要的一块,对于IT行业,英语才是通用语. 记在<JAVA语言程序设计>学习的第一章英文学习之后 .class file(.class文件)                       javac command(javac命令)          .java file(.java文件)            java Development Toolkit(JDK,java开发工具包)          assembl

java学习笔记14--多线程编程基础1

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为一个进程,例如:用字处理软件编辑文稿时,同时打开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程 进程要占用相当一部分处理器时间和内存资源 进程具有独立的内存空间 通信很不方便,编程模型比较复杂 多线程 一个程序中多段代码同时并发执行,称为多线程,线程比进程开销小,协作和数据交换容易