java学习之文件操作

1.文件的创建

public class FileCreat {

	public static void main(String[] args) {
		//File构造函数直接输入文件名,创建的是相对目录(也就是相对路径)下的文件,就是当                               
                //前工作空间下                
                //如果想要创建上一级的文件夹的文件,则需要改为File("../hello.txt")
                //上上一级的就为File("../../hello.txt")
		File file = new File("hello.txt");
		if(file.exists())
		{
                        //用来判断file是否为文件
			System.out.println(file.isFile());
                        //用来判断file是否为目录
			System.out.println(file.isDirectory());
			System.out.println("文件存在");
		}
		else {
			System.out.println("文件不存在");
			System.out.println("创建文件");
			try {
                                //创建文件
				file.createNewFile();
				System.out.println("文件成功创建!");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				System.out.println("文件创建失败!");
			}
		}

	}

}

2.文件删除

//可以直接删除用名字初始化的文件
file.delete();//用来删除file文件的

3.文件重命名

File file = new File("hello.txt");
File newName = new File("newNameFile.txt");
if(file.exits())
{
    System.out.println("文件存在");
    file.renameTo(newName);//注意renameTo函数只接受File的对象,不接受“newNameFile.txt”
    System.out.println("文件创建成功");
}
else
{
    System.out.println("文件不存在,文件改名失败");
}

4.文件移动

//没想到这种重命名的可以移动文件
//不过需要注意的是,这种移动只能在同一分区下,如果是不同分区就不可以了
//MAC是同一分区的,windows下面的就不可以用这种方式进行不同分区移动
//windows系统下如果想要进行文件的移动需要进行拷贝删除,进而实现文件的移动
File file = new File("newName.txt");
File newName = new File("src/newName.txt");
if(file.exists())
{

    System.out.println("文件存在");
    file.renameTo(newName);

}

5.文件的读取


public static void main(String[] args)
{
    File file = new File("src/readTest");
    try
    {
        //读前操作,FileInputStream是文件字节输入流,一般情况下用文件字节输入流会更好一点
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        
        //开始读
        String str;
        while((str = br.readLine()) != null)
        {
            System.out.println(str);
        }

        //注意关闭的顺序是倒序的
        br.close();
        isr.close();
        fis.close();
    }
    catch (FileNotFoundException e) 
    {
	e.printStackTrace();
    }
    catch (IOException e) 
    {
	e.printStackTrace();
    }
}

6.创建文件夹、创建多层文件夹、文件夹的重命名、移动、删除

public class CreatFolder {
	public static void main(String[] args) {
		File folder = new File("newFolder");
		//创建文件夹的时候,如果这个文件夹存在,mkdir方法会返回一个false,即创建不成功
		//mkdir方法也不支持创建多层的文件夹,比如newFolder/a/b/c...类似这种的
		//因为newFolder不存在,a,b,c文件夹都不存在无法创建
		//但是可以使用mkdirs方法来创建多层文件夹
		if(folder.mkdir())
		{
			System.out.println("创建成功");
		}
		else {
			System.out.println("创建失败");
		}
		File multiLayer = new File("multiLayer/1/2/3");
		if(multiLayer.mkdirs())
		{
			System.out.println("多层文件夹创建成功");
		}
		else {
			System.out.println("多层文件夹创建失败");
		}

                
                //---------------文件夹的重命名----------------------
      		//文件夹的重命名,原先的文件夹的名字为multiLayer1/a/b/c,
		//更改后的名字为multiLayer1/a/2222
		//新名字后面不能再有路径了,
		//比如multiLayer1/a/2222/c,新名字后面有路径c,这样会创建失败的
		File ff = new File("multiLayer1/a/b");
		File newName = new File("multiLayer1/a/2222");
		if (ff.renameTo(newName)) {
			System.out.println("multiLayer1/a/b/c重命名成功");
		}
                //--------------------------------------------------




                //---------------文件夹的移动------------------------
                //要注意必须是在同一分区,且文件夹存在,任何一个不成立都会失败
		File f =new File("multiLayer1/a/b/c");
		if (f.mkdirs()) {
			System.out.println("multiLayer1/a/b/c.文件夹创建成功");
		} else {
			System.out.println("multiLayer1/a/b/c.创建失败");
		}
		
		File ff = new File("multiLayer1/a/c");
		if (f.renameTo(ff)) {
			System.out.println("已成功将c文件夹移入a文件夹里面");
		}
                //--------------------------------------------------



		//-------------------文件夹的删除---------------------
		//需要注意的是要删除的文件夹里面必须是没有内容的
		//如果文件夹里面有内容会删除失败
		File fFile = new File("multiLayer1/a/c");
		if (fFile.delete()) {
			System.out.println("c文件夹删除成功");
		}
                //---------------------------------------------------
	}
}

7.文件的属性获取

public static void main(String[] args) {
	File file = new File("FileProperty.txt");
	//判断文件是否存在
	System.out.println("文件是否存在:"+file.exists());
	//读取文件的名称
	System.out.println("文件的名称:"+file.getName());
	//读取文件相对路径
	System.out.println("获取文件的相对路径:"+file.getPath());
	//读取文件绝对路径
	System.out.println("获取文件的绝对路径:"+file.getAbsolutePath());
	//获取当前文件的父路径,
	//getParent()方法获取的是绝对路径的父路径
	//因为绝对路径为FileProperty.txt,所以是没有父路径的
	System.out.println("文件当前路径的父路径:"+file.getParent());
	System.out.println("文件当前路径的父路径:"+new File(file.getAbsolutePath()).getParent());
	//读取文件大小
	System.out.println("获取文件的大小:"+file.length()+"byte");
	//判断文件是否被隐藏
	System.out.println("文件是否被隐藏:"+file.isHidden());
	//判断文件是否可写
	System.out.println("文件是否可写:"+file.canWrite());
	//判断文件是否可读
	System.out.println("文件是否可读:"+file.canRead());
	//判断文件是否为文件夹
	System.out.println("文件是否为文件夹:"+file.isDirectory());



	if(file.exists())
	{
                //设置文件属性为可写
        	file.setWritable(true);
                //设置文件属性为只读
		file.setReadOnly();
                //设置文件属性为可读
		file.setReadable(true);
	}
}

8.遍历文件夹

public class FolderScaner {
	public static void main(String[] args) {
		printFilesDirection(new File("D:/eclipse/workplace/FileDemo"), 1);
	}
	public static void printFilesDirection(File dir,int tab)
	{
		if(dir.isDirectory()) {
			File listDir[] = dir.listFiles();
			for (int i = 0; i < listDir.length; i++) {
				for (int j = 0; j < tab; j++) {
					System.out.print("|--");
				}
				System.out.println(listDir[i].getName());
				if (listDir[i].isDirectory()) {
					printFilesDirection(listDir[i], tab + 1);
				}
			}
		}
	}

}

 

 

9.将数据写入新文件(复制)

//此代码的写入是具有覆盖性的,如果直接在末尾追加,则之前写入的数据是会全部丢失的
//注意使用缓冲进行输出的时候,如果最后一次缓冲区内的数据没填充满,那么这部分数据可能无法打印出来
//所以需要在结束之前调用flush方法,将最后一次的缓冲区内的数据一次性输出
public static void main(String[] args) {
	File file = new File("src/readTest");
	//将数据写入文件
	try {
		FileInputStream fis = new FileInputStream(file);
		InputStreamReader isr = new InputStreamReader(fis);
		BufferedReader br = new BufferedReader(isr);
		
		//这里不用创建新文件,如果在下面的流中发现没有该文件
		//那么系统会自动的生成该文件,然后继续执行
		File newFile = new File("copyReadTest.txt");
		FileOutputStream fos = new FileOutputStream(newFile);
                //最好使用带编码的构造函数,避免写出来的文件是乱码的
		OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
                //用BufferedWriter的话,在打印输出的时候需要自己加上换行符,不然的话出来的结果是一整行
		BufferedWriter bos = new BufferedWriter(osw);
		//如果不想添加换行的话,可以使用PrintWriter,该构造函数里有flush,只需将其设为true即可
                //PrintWriter pw = new PrintWriter(osw,true);
                
		String str;
		while((str = br.readLine()) != null)
		{
			bos.write(str);
			bos.write("\n");

                        //pw.println(str);//只需一行
		}
                bos.flush();//强制输出缓冲区的内容
                
		br.close();
		isr.close();
		fis.close();
		
                //pw.close();//使用PrintWriter才加
		bos.close();//使用PrintWriter,这个就要删
		osw.close();
	        fos.close();
		System.out.println("写入完成");
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
	catch (IOException e) {
		e.printStackTrace();
	}
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值