一:流的概述
流是一组有序的数据序列,根据操作的类型可分为输入流和输出流两种。流提供了一种通道来将源(文件,网络,压缩包或其他数据源)中的的字节序列来送至目的地。java中定义了许多类来负责各种方式的输入输出,这些类都被放在java.io包中所有的输入类为抽象类InputStream或抽象类Reader的子类,所有输出类为抽象类OutPutStream或抽象类Writer类的子类。
(1)输入流:InputStream为字节输入流的抽象类,所有字节输入流的父类,该类的所有方法遇到错误都会引发IOException异常。
(2)输出流:是字节输出流的抽象类,是所有表示输出字节流的父类,该类的所有方法遇到错误都会引发IOException异常。
二:File类的概述:
File类是java.io包中唯一代表磁盘文件本身的对象。File类定义了与平台无管操作的方法来操作文件,通过调用File类的方法来实现创建,删除,重命名等操作。
1.文件的创建
(1)File(String pathname) ——————————–pathname指的是路径名称(包含文件名)例如:File file=new File(“D:\1.txt”);
(2)File(String parent,String child);parent为父路径字符串,child为子路径字符串
(3)File(File f,String child);
注意:File file=new File(“Word.txt”);
当前目录如果不存在名称为Word的文件的话,则可以调用createNewFile()方法来创建一个文件
举例:
public class Demo1 {
public static void main(String[] args) {
File file = new File("2.txt");
if (file.exists()){
file.delete();
System.out.println("文件已删除");
}else{
try {
file.createNewFile();
System.out.println("文件已创建");
}catch (Exception e){
e.printStackTrace();
}
}
}
}
结果:
2.文件的删除
通过文件对象的delete()方法来删除文件。
3File类的常用方法:
.isexits();判断一个文件对象是否存在,并返回一个布尔值;
.isFile() ; 返回一个布尔值代表是否是文件;
.isDirectory(); 返回一个布尔值代表是否是目录;
File 可以用来代表不存在的目录或文件:;
.mkdir() 来创建一个目录;
.mkdirs() 可以用来创建多级目录;
.listFiles() 得到一个目录下的所有子目录和文件;
举例:
public class Demo2 {
public static void main(String[] args) throws IOException {
File file = new File("D:\\1.txt");
file.mkdir();
File f2 =new File("c:\\abc","2.txt");
f2.mkdirs();
File file1 = new File("D:\\k\\e");
file1.mkdirs();
System.out.println(file.isDirectory());//判断是否为目录
System.out.println(file.exists());//判断文件夹
System.out.println(file.isFile());//判断是否为文件
}
}
结果:
举例:对一个File对象进行遍历和对对象的过滤
代码:
public class Demo4 {
public static void main(String[] args) {
File file = new File("D:\\Intelli IDEA");
File[] listFiles = file.listFiles();
for(File i:listFiles){
System.out.println(i);//遍历文件夹中的文件
}
System.out.println("----------------");
//过滤
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (name.startsWith("M")) {
return true;
} else {
return false;
}
}
});
for (File s:files){
System.out.println(s);
}
}
}
结果:
三:I/O流
1:概述:Input:如果我对一个一个文件进行读取,那么这个文件对于我来说就是输入流:Output:如果我对一个 文件进行写入内容那么这个文件对于我来说就是输出流
2:字节流的介绍
2.1.1字节流顾名思义就是以字节为单位进行输入输出操作
2.1.2字节输入流的抽象类为InputStream,它的子类为FileInputStream
2.1.3字节输出流的抽象类为OutStream,它的子类为FileOutputStream
举例;对一个文件的读取:
public class Demo3 {
public static void main(String[] args)throws IOException {
FileInputStream fis = new FileInputStream(new File("D:\\Intelli IDEA\\MyprojectDemo20180810\\src\\1.txt.txt"));
while(true){
int read = fis.read();
if(read==-1){
break;
}
System.out.println((char)read);
}
file.close();
}
}
结果:
2.1.4输出流的举例:
代码:
public class OutPutStream {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream(new File("2.txt"));
fos.write(97);
fos.write(98);
fos.write(105);
fos.close();
}
}
结果:
举例:文件之间的赋值:
代码:
public class Copy {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("F:\\java知识\\第十七天\\作业\\test.txt"),"gbk"));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream("3.txt"), "utf-8"));
while(true){
String s = reader.readLine();
if(s==null){
break;
}
writer.write(s);
writer.println();
}
reader.close();
writer.close();
}
}
结果:
源文件:
复制原来的文件:
3.字符流的介绍
3.1字符流的概述:(以字符为处理单位)
3.2字符输入流为Reader InputStreamReader可以将字节输入流转换为字符输入流
字符输出流为Writer OutputStreamWriter可以将字节输出流转换为字符输出流
与以上同等级的类有BufferedReader和BufferedWriter
举例:
读取一个文件里的内容
代码:
public class Demo4 {
public static void main(String[] args)throws IOException {
InputStreamReader reader = new InputStreamReader(new FileInputStream("2.txt"));
while(true){
int s=reader.read();
if(s==-1){
break;
}
System.out.println((char)s);
}
}
}
结果:
写入一个文件:
public class Demo5 {
public static void main(String[] args)throws IOException {
//
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("5.txt"), "utf-8");
writer.write("爱我中华");
writer.write("我爱中华");
writer.close();
}
}
结果: