什么是文件
有个时候我们程序中的数据不会直接保存,一旦程序断电,数据将不会存在,如果我们想要我们程序中的数据永久的保存起来,所以,java的文件io显得非常重要。
什么是文件流
创建文件
如下相关的文件io方法
new File(String pathName) 根据目录创建一个文件
如下代码
import java.io.File;
public class Main {
public static void main(String[] args) {
// 方法1 使用 new file(string name)创建一个文件
String filePath="/home/windstorm/javafile.txt";
File file = new File(filePath);
try {
file.createNewFile();
System.out.println("文件创建成功");
}catch (Exception e)
{
System.out.println("创建失败");
}
}
}
执行效果如下
文件也成功的创建在我的家目录
new File(String parent,String child)根据父目录创建一个子文件
如下代码
import java.io.File;
public class Main {
public static void main(String[] args) {
String childPath="javafile2.txt";
String parenPath="/home/windstorm/";
File file = new File(parenPath,childPath);
try {
file.createNewFile();
System.out.println("文件创建成功");
}catch (Exception e)
{
System.out.println("创建失败");
}
}
}
执行效果
执行结果
new File(File parentName,childPath)创建一个根据父目录文件和子路径创建一个文件
import java.io.File;
public class Main {
public static void main(String[] args) {
String childPath="javafile3.txt";
String parenPath="/home/windstorm/";
// 得到父目录的路径
File parentFile=new File(parenPath);
// 得到file
File file = new File(parentFile,childPath);
try {
// 执行这一步才会真正的写入文件到磁盘
file.createNewFile();
System.out.println("文件创建成功");
}catch (Exception e)
{
System.out.println("创建失败");
}
}
}
运行效果
执行效果
删除文件
使用delete方法可以删除文件或者目录
如下代码删除
/home/windstorm/javafile1.txt文件
import java.io.File;
public class Main {
public static void main(String[] args) {
// 填写要删除的文件路径
File file = new File("/home/windstorm/javafile1.txt");
// 判断文件是否存在
if (file.exists())
{
// 删除
try {
file.delete();
System.out.println("删除成功");
}catch (Exception e)
{
}
}
}
}
运行效果如下
文件成功删除
delete也可以删除目录
创建如下目录
/home/windstorm/javafiles
执行如下代码
import java.io.File;
public class Main {
public static void main(String[] args) {
// 填写要删除的文件路径
File file = new File("/home/windstorm/javafiles/");
// 判断文件是否存在
if (file.exists())
{
// 删除
try {
file.delete();
System.out.println("删除成功");
}catch (Exception e)
{
}
}
}
}
执行效果如下
目录删除成功
获取文件相关信息
在java在可以获取如下信息
如下程序获取/home/windstorm/javafile1.txt 的文件信息
import java.io.File;
public class Main {
public static void main(String[] args) {
File file = new File("/home/windstorm/javafile1.txt");
// 得到文件的名字
System.out.println(file.getName());
// 得到绝对路径
System.out.println(file.getAbsolutePath());
// 得到父目录
System.out.println(file.getParent());
// 得到文件的长度
System.out.println(file.length());
// 文件是否存在
System.out.println(file.isFile());
// 目录是否存在
System.out.println(file.isDirectory());
}
}
执行结果如下
操作目录
对于目录的操作,有如下方法.
如下程序
import java.io.File;
public class Main {
public static void main(String[] args) {
File file = new File("/home/windstorm/JavaFiles");
// 如果JavaFile没有操作,就创建一个这样的目录
file.mkdir();
}
}
运行效果如下
成功的在/home/windstorm/创建了一个JavaFiles的目录
mkdirs的效果可以创建多个目录
代码如下
import java.io.File;
public class Main {
public static void main(String[] args) {
File file = new File("/home/windstorm/JavaFiles/files");
// 如果JavaFile/files没有操作,就创建一个这样的目录
file.mkdirs();
}
}
运行效果如下
使用mkdirs可以创建含有子目录的目录.
IO流
IO(Input Output)流就是输入输出流。
从外部设备读取数据到内存中就叫做输入流。
从内存中将数据输出到外部设备就叫做输出流。
流的分类
FileInputStream使用
FileInputStream.read()读取一个字符
案例
读取目录/home/windstorm/data.txt 中的数据到java程序中。
首先读取一个字符
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
new Main().readFile();
}
public void readFile() {
String filePath="/home/windstorm/data.txt";
int data;
try {
// 创建一个文件输入流,用于读取文件
FileInputStream fileInputStream = new FileInputStream(filePath);
// 读取一个字节,如果没有数据,返回-1
data = fileInputStream.read();
// 得到输出结果
System.out.println("Read date is ::"+(char)data);
}catch (IOException e)
{
System.out.println("Read file failed");
}
}
}
全部读取
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
new Main().readFile();
}
public void readFile() {
String filePath="/home/windstorm/data.txt";
int data;
try {
// 创建一个文件输入流,用于读取文件
FileInputStream fileInputStream = new FileInputStream(filePath);
// 读取一个字节,如果没有数据,返回-1
data = fileInputStream.read();
while (data!=-1)
{
// 得到输出结果
System.out.println("Read date is ::"+(char)data);
data=fileInputStream.read();
}
}catch (IOException e)
{
System.out.println("Read file failed");
}
}
}
FileInputStream.read(buf) 读取n个字节到buf中
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
new Main().readFile();
}
public void readFile() {
String filePath="/home/windstorm/data.txt";
// 使用字符数组的方式读取字符
byte [] buf = new byte [4];
int readLenth;
try {
// 创建一个文件输入流,用于读取文件
FileInputStream fileInputStream = new FileInputStream(filePath);
// 读取4个字符到buf中,返回读取字符的个数
readLenth=fileInputStream.read(buf);
// 转成字符串输出
System.out.println(new String(buf,0,readLenth));
// 通常这种读取方式的效率比较高
}catch (IOException e)
{
System.out.println("Read file failed");
}
}
}
全部读取
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
new Main().readFile();
}
public void readFile() {
String filePath="/home/windstorm/data.txt";
// 使用字符数组的方式读取字符
byte [] buf = new byte [4];
int readLenth;
try {
// 创建一个文件输入流,用于读取文件
FileInputStream fileInputStream = new FileInputStream(filePath);
// 读取4个字符到buf中,返回读取字符的个数
readLenth=fileInputStream.read(buf);
while (readLenth!=-1)
{
// 转成字符串输出
System.out.println(new String(buf,0,readLenth));
readLenth=fileInputStream.read(buf);
}
// 通常这种读取方式的效率比较高
}catch (IOException e)
{
System.out.println("Read file failed");
}
}
}
FileOutputStream的使用
FileOutputStream.write() 输出一个字符到磁盘
这里输出一个字符到当前目录下
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("./a.txt");
fileOutputStream.write('h');
fileOutputStream.close();
}
}
运行结果如下
如下代码输出一个字符串到磁盘。
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("./a.txt");
fileOutputStream.write("Good idea".getBytes());
fileOutputStream.close();
}
}
效果如下
将内存数据追加到磁盘
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
//加上true以后表示追加
FileOutputStream fileOutputStream = new FileOutputStream("./a.txt",true);
fileOutputStream.write("Good idea".getBytes());
fileOutputStream.close();
}
}
案例:视频拷贝
拷贝/home/windstorm/丝滑火焰流星锤~原创.mp4 到/home/windstorm/Videos/目录下
如下代码
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class Main {
public static void main(String[] args) throws IOException {
new Main().VideosCopy("/home/windstorm/丝滑火焰流星锤~原创.mp4","/home/windstorm/Videos/丝滑火焰流星锤.mp4");
}
void VideosCopy(String targetPath,String disPath) throws IOException
{
FileInputStream inputStream = new FileInputStream(targetPath);
FileOutputStream fileOutputStream = new FileOutputStream(disPath);
// 每一次读取8个字节到内存
byte buf [] = new byte[8];
while ((inputStream.read(buf))!=-1)
{
fileOutputStream.write(buf);
System.out.println("Copied 8 byte ");
}
System.out.println("Done");
}
}
执行结果如下
成功将视频拷贝到videos目录下。