java中文件操作

1、创建目录/文件

java中创建文件、目录非常容易。指定文件/目录路径,然后调用mkdir()和createNewFile()方法。

import java.io.File;

public class Main
{
	public static void main(String[] args)
	{
		try {
			File dir = new File("d:\\OJ2");
			dir.mkdir();
			File file = new File(dir, "fil1");
			file.createNewFile();
		} catch (Exception e) {
			
		}
	}
}

2、删除文件

调用File.delete()方法

import java.io.File;

public class Main
{
	public static void main(String[] args)
	{
		try {
			File file = new File("d:/OJ2/fil1");
			if (file.delete()) {
				System.out.println(file.getName() + " deleted!");
			} else {
				System.out.println("file is not deleted.");
			}
		} catch (Exception e) {
			
		}
	}
}

3、一行一行读文件

java I/O类的数目比较多,很容易混淆什么时候用哪个。下面有两种方式以行方式读文件

方法一:

private static void readFile1(File fin) throws IOException {
	FileInputStream fis = new FileInputStream(fin);
 
	//Construct BufferedReader from InputStreamReader
	BufferedReader br = new BufferedReader(new InputStreamReader(fis));
 
	String line = null;
	while ((line = br.readLine()) != null) {
		System.out.println(line);
	}
 
	br.close();
}

方法二:

private static void readFile2(File fin) throws IOException {
	// Construct BufferedReader from FileReader
	BufferedReader br = new BufferedReader(new FileReader(fin));
 
	String line = null;
	while ((line = br.readLine()) != null) {
		System.out.println(line);
	}
 
	br.close();
}

这两种方法的区别之处是用什么来构造BufferedReader。方法一是用InputStreamReader,方法二是FileReader.

在Java Doc中,InputStreamReader是连接byte stream和character streams的桥梁,读取字节后,解释成字符。InputStreamReader还能处理除文件外的输入流,如网络连接、类路径资源、zip文件等。

FileReader是方便读取字符的类。该类的构造函数认为默认的字符编码和缓冲大小 是合适的。因此,如果程序运行在不同编码系统中时,不是一种好主意。

总体来说,InputStreamReader相对于FileReader是安全的选择。


4、写文件

下面的代码是写文件的代码,每次执行时,把旧文件删除,再创建新文件。这个不同于追加内容到文件。

public static void writeFile1() throws IOException {
	File fout = new File("out.txt");
	FileOutputStream fos = new FileOutputStream(fout);
 
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
 
	for (int i = 0; i < 10; i++) {
		bw.write("something");
		bw.newLine();
	}
 
	bw.close();
}

例子中用的是FileOutStream,你也可以用FileWriter或者PrintWriter。

用FileWriter:

public static void writeFile2() throws IOException {
	FileWriter fw = new FileWriter("out.txt");
 
	for (int i = 0; i < 10; i++) {
		fw.write("something");
	}
 
	fw.close();
}

用PrintWriter:

public static void writeFile3() throws IOException {
	PrintWriter pw = new PrintWriter(new FileWriter("out.txt"));
 
	for (int i = 0; i < 10; i++) {
		pw.write("something");
	}
 
	pw.close();
}

用OutputStreamWriter:

public static void writeFile4() throws IOException {
	File fout = new File("out.txt");
	FileOutputStream fos = new FileOutputStream(fout);
 
	OutputStreamWriter osw = new OutputStreamWriter(fos);
 
	for (int i = 0; i < 10; i++) {
		osw.write("something");
	}
 
	osw.close();
}

Java Doc:

FileWriter is a convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.

PrintWriter prints formatted representations of objects to a text-output stream. This class implements all of the print methods found in PrintStream. It does not contain methods for writing raw bytes, for which a program should use unencoded byte streams.


5、以追加的形式写文件

如果想用代码创建文件,并且删除先前的文件,可以用FileWriter.要替换已存在文件的所有内容,可以用下面的这块代码:

FileWriter fstream = new FileWriter(loc);

其中loc表示文件路径。

要追加内容到已经存在的文件中,只需要设置第二个参数为true就行了

FileWriter fstream = new FileWriter(loc, true);


6、文件复制

只需要调用FileUtils的方法CopyFile(File srcFile, File dstFile),代码如下:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class FileCopyTest {
	public static void main(String[] args) {
		Path source = Paths.get("/Users/apple/Desktop/test.rtf");
		Path destination = Paths.get("/Users/apple/Desktop/copied.rtf");
 
		try {
			Files.copy(source, destination);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


7、合并文件

package com.programcreek;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class MergerFiles {
 
	public static void main(String[] args) {
		String sourceFile1Path = "/home/programcreek/Desktop/s1";
		String sourceFile2Path = "/home/programcreek/Desktop/s2";
 
		String mergedFilePath = "/home/programcreek/Desktop/m";
 
		File[] files = new File[2];
		files[0] = new File(sourceFile1Path);
		files[1] = new File(sourceFile2Path);
 
		File mergedFile = new File(mergedFilePath);
 
		mergeFiles(files, mergedFile);
	}
 
	public static void mergeFiles(File[] files, File mergedFile) {
 
		FileWriter fstream = null;
		BufferedWriter out = null;
		try {
			fstream = new FileWriter(mergedFile, true);
			 out = new BufferedWriter(fstream);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
 
		for (File f : files) {
			System.out.println("merging: " + f.getName());
			FileInputStream fis;
			try {
				fis = new FileInputStream(f);
				BufferedReader in = new BufferedReader(new InputStreamReader(fis));
 
				String aLine;
				while ((aLine = in.readLine()) != null) {
					out.write(aLine);
					out.newLine();
				}
 
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
 
		try {
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
 
	}
}


8、移动文件

如果要将文件从一个目录移动另外一个目录下,就用renameTo()方法,下面就是一个例子:

package com.programcreek;
 
import java.io.File;
 
public class MoveFileExample {
 
	public static void main(String[] args) {
		File file = new File("/home/programcreek/Desktop/s1");
		String targetDirectory = "/home/programcreek/Desktop/d3/";
 
		if (file.renameTo(new File(targetDirectory+ file.getName()))) {
			System.out.println("File is moved to " + targetDirectory);
		} else {
			System.out.println("Failed");
		}
	}
}


9.合并目录

package com.programcreek;
 
import java.io.File;
 
public class MergeTwoDirectories {
	public static void main(String[] args){
		String sourceDir1Path = "/home/programcreek/Desktop/d1";
		String sourceDir2Path = "/home/programcreek/Desktop/d2";
 
		File dir1 = new File(sourceDir1Path);
		File dir2 = new File(sourceDir2Path);
 
		mergeTwoDirectories(dir1, dir2);
 
	}
 
	public static void mergeTwoDirectories(File dir1, File dir2){
		String targetDirPath = dir1.getAbsolutePath();
		File[] files = dir2.listFiles();
		for (File file : files) {
			file.renameTo(new File(targetDirPath+File.separator+file.getName()));
			System.out.println(file.getName() + " is moved!");
		}
	}
}



10.遍历目录

import java.io.File;

public class Main
{
	public static void main(String[] args)
	{
		try {
			File[] files = new File("d:/OJ").listFiles();
			showFiles(files);
		} catch (Exception e) {
			
		}
	}
	
	private static void showFiles(File[] files)
	{
		for (File file : files) {
			if (file.isDirectory()) {
				System.out.println("Directory:" + file.getName());
				showFiles(file.listFiles());
			} else {
				System.out.println("File:" + file.getName());
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值