import java.io.File;
import java.io.IOException;
public class FileInputStreamBlog {
public static void main(String[] args){
//声明的文件可以是不存在的
//第一种实例化方法:
File file = new File("D:\\文件夹1\\b.txt");
//第二种实例化方法:
//这里的file2是在file1的路径下创建的
File file1 = new File("D:\\文件夹1");
File file2 = new File(file1,"a.txt");
}
}
注意:当代码要求能跨平台使用时(相对路径用的比较多),路径分隔符就要用File.separator代替,因为不同系统的默认路径分隔符可能不同,如windows的默认分隔符是“\”,而Linux系统则是“/”;所以这个File.separator就是解决这种尴尬的局面,它会根据系统而转变成对应的分隔符。做法如下:
//第一种实例化方法:
File file = new File("D:"+File.separator+"文件夹1"+File.separator+"b.txt");
File file = new File("D:\\文件夹1");
File file1 = new File("D:\\文件夹2\\a.txt");
//两者返回值都是boolean类型
file.mkdir(); //创建单个文件夹
boolean key = file1.mkdirs(); //创建该路径下所有文件夹,注意:最后创建出名为a.txt的文件夹
File file3 = new File("D:\\c.txt");
file3.createNewFile();
当路径不存在时会产生IOException,程序无权限操作系统文件时会产生SecurityException 。
isFile():判断是否是文件类型
listFiles():返回该file路径下一层中所有的文件和文件夹,结合可查找所需文件:
package com.huilong.Test;
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws IOException {
File file = new File("D:\\");
File[] files = file.listFiles(); //返回该file路径下一层中所有的文件和文件夹
print(files);
}
public static void print(File[] files){
if (files!=null && files.length!=0){
for (File file1:files){
if (file1.isFile()){
//判断是否是一个文件
if (file1.getName().endsWith(".txt")){
System.out.println("找到一个txt文件:"+file1.getAbsolutePath());
}
}else {
File[] files1 = file1.listFiles();
print(files1);
}
}
}
}
}
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamTest {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\a.txt",true);
//1.文件不存在则创建
//2.要抛出FileNotFoundException是因为防止文件因权限不足创建失败
//3.这里传参传入了一个true,就是开启追加模式;如果不传默认为false,则清空原文件的内容。
byte[] bytes ="ABCD".getBytes(); //或者{65,66,67,68}
fos.write(bytes);
fos.write(bytes,1,3); //这里还可以传参,重点:第一个数是起始位置,而第二个则是个数。
fos.write(65); //传入一个int,则忽略高24位,取低8位,如65:A
fos.close(); //一定记得要关闭,否则文件会被一直占用
}
}
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:\\a.txt");
//这里可以选择传入一个File对象
byte b = (byte) fis.read();
//这里没有传参的read方法是将指针下移一位,读到的值以int形式返回,若读到没有值则返回-1
System.out.println((char) b);
byte[] bytes = new byte[10];
String str="";
while(true){
int len =fis.read(bytes);
//1.此read方法是返回实际读到的字节的数量,若没有新值读入则返回-1
//2.这里传入byte数组的read方法是用读到的新值存在数组里,覆盖旧的值,当最后读到的新值不足以覆盖旧值,那么数组里会存有旧值。
//3.byte数组的大小影响整体的读入速度(下载也是一种读入)
if(len==-1){
break;
}
str = new String(bytes,0,len);
System.out.println(str);
}
fis.close();
}
}
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
public static void main(String[] args) throws IOException {
FileWriter fileWriter = new FileWriter("c.txt",true);
//1.传入true为追加模式;不传则默认为false,先清空再添加数据
//2.文件不存在则创建
fileWriter.write("语句1");
//这里的append是write的升级版,append返回this对象,所以一句中可多次调用append
fileWriter.append("语句2\n").append("语句3");
fileWriter.close();
}
}
1.FileReader
import java.io.FileReader;
import java.io.IOException;
public class FileReaderBlog {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("a.txt");
//文件不存在或某种原因不能访问时返回FileNotFoundException
char[] word = new char[10];
StringBuffer str = new StringBuffer();
while (true){
int len = fileReader.read(word);
if (len==-1){
break;
}
str.append(new String(word,0,len));
}
System.out.println(str);
}
}
2.InputStreamReader
字节流装饰为字符流:使用了装饰者设计模式
import java.io.*;
public class InputStreamBlog {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("a.txt");
//转换流:字节流装饰为字符流,使用了装饰者设计模式
//参数一:要转换的字节流
//参数二:指定编码名称(不传则使用默认字符集)
InputStreamReader isr = new InputStreamReader(fileInputStream,"gbk");
char[] word = new char[10];
isr.read(word);
System.out.println(new String(word));
isr.close();
}
}
注意:这里的char数组在接收数据,占用内存会根据接收的数据类型改变而改变,如接收了UTF-8占三个字节的汉字,那么数组中存放该汉字的char位就占三个字节。