主要为了演示文件输入输出流的简单操作,在此之前要会文件的简单操作。所以,主要分三部分讲:文件操作、文件输入流、文件输出流。
注:对于这些类,很多方法不记得要学会查看api。
File
只写了几种简单的操作,具体看代码,注释讲解。
package File;
import java.io.File; //File类需要引用
public class TestFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f =new File("D:\\文学社的旧文件\\我的稿子");
File[] files= f.listFiles(); //获取路径下的所有文件和文件夹
for(File file:files) {
System.out.println("文件名:"+file.getName()); //获取文件名称
System.out.println("文件路径:"+file.getPath()); //获取文件路径
if(file.isDirectory()) { //判断是否为文件夹
System.out.println("这是一个文件夹!");
}
System.out.println(); //为了结果显示更清晰,空格隔开每个文件的信息
}
}
}
显示结果:
简单总结一下我代码中用到的方法:
- File f =new File("D:\\文学社的旧文件\\我的稿子"); 构造方法,参数为文件路径;
- File[] files= f.listFiles() 获得路径下的文件及文件夹;
- file.getName() 获得文件名称
- file.getPath() 获得文件路径
- isDirectory() 判断是否为目录
FileInputStream
文件输入流,可用来读取文件中的内容。
先看代码和注释:
package File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestFileInputStream_FileOutStream {
public static void main(String[] args) {
// TODO Auto-generated method stub
//演示文件输入部分
FileInputStream fis =null; //定义一个文件输入流
try {
//初始化得到文件路径
fis=new FileInputStream("C:\\Users\\123\\Desktop\\test.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int i =0; //接收读入的字节
try {
i=fis.read(); //一个字节一个字节地读取文件内容
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(i!=-1) {
System.out.print((char)i); //将读入的字节转换为字符打印到控制台
try {
i=fis.read(); //然后继续读下一个字节
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//操作完了之后,要记得关闭文件输入流
try {
fis.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
注意事项:
- read()方法是读取一个字节,所以不可以准确读取汉字,一个汉字需要两个字节来表示;
- 对文件流操作结束之后要记得关闭文件流。
FileOutputStream
文件输出流,用来向文件中写入内容。看代码:
package File;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestFileInputStream_FileOutStream {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 演示输出部分(两种)
//定义需要写入文件的字符串
String s = "I am learning how to write data in files by using IO Stream! ";
FileOutputStream fos = null;
FileOutputStream fos1 = null;
File f = new File("C:\\Users\\123\\Desktop\\f.txt");
File f1 = new File("C:\\Users\\123\\Desktop\\f1.txt");
// 检查文件是否存在,不存在时创建文件
if (!f.exists()) {
// f.mkdirs(); //生成文件夹
try {
f.createNewFile();// 生成文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (!f1.exists()) {
// f1.mkdirs(); //生成文件夹
try {
f1.createNewFile(); // 生成文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 初始化输出流变量
try {
fos = new FileOutputStream(f);
fos1 = new FileOutputStream(f1);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] b = s.getBytes(); // 把要输出的内容转换为byte数组
try {
// 用文件输出流的写方法来往文件中写东西
fos.write(b);
fos1.write(b, 0, b.length / 2); // 使用写方法的重载方法之写入部分字符串(第二个参数是写入的起始位置,第三个参数是写如的长度)
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 操作完成之后记得关闭文件流
try {
fos.close();
fos1.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
演示了两种写入方法:
好了,差不多就这些。使用的时候,结合着api会容易些。
晚安。