文章目录
- 1.遍历文件夹
- 2.遍历子文件夹
- 3.练习流
- 4.以字节流的形式读取文件内容
- 5.以字节流的形式向文件写入数据顶折纠问
- 6 .写入数据到文件
1.遍历文件夹
一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。
遍历这个目录下所有的文件(不用遍历子目录)
找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名
注: 最小的文件不能是0长度
package Basic.wordhard;
import java.io.File;
public class Demo {
public static void main(String[] args) {
File f=new File("C:\\Windows");
// 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
File fs[]=f.listFiles();
File max_file = null,min_file=null;
long min=Long.MAX_VALUE;
long max=0;
for(File e:fs){
if(e.length()>max){
max=e.length();
max_file=e;
}
if(e.length()!=0&&e.length()<min){
min=e.length();
min_file=e;
}
}
System.out.println("找出的最大文件为"+max_file.getName()+" 文件大小"+max);
System.out.println("找出的最小文件为"+min_file.getName()+" 文件大小"+min);
}
}
2.遍历子文件夹
同上的练习,要求遍历子文件夹
package Basic.wordhard;
import java.io.File;
public class Demo {
static File minFile = null;
static File maxFile = null;
public static void main(String[] args) {
File dir = new File("C:\\WINDOWS");
traverseFolder(dir);
if (minFile != null) {
System.out.println("最小的文件是 " + minFile.getName() + ",其大小是 " + minFile.length() + " 字节");
}
if (maxFile != null) {
System.out.println("最大的文件是 " + maxFile.getName() + ",其大小是 " + maxFile.length() + " 字节");
}
}
public static void traverseFolder(File dir) {
File[] files = dir.listFiles();
if (files == null || files.length == 0) {
return;
}
for (File file : files) {
if (file.isFile()) {
if (minFile == null || (file.length() < minFile.length() && file.length() != 0)) {
minFile = file;
}
if (maxFile == null || file.length() > maxFile.length()) {
maxFile = file;
}
} else if (file.isDirectory()) {
traverseFolder(file);
}
}
}
}
3.练习流
当不同的介质之间有数据交互的时候,JAVA就使用流来实现。
数据源可以是文件,还可以是数据库,网络甚至是其他的程序
比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流
输入流: InputStream
输出流:OutputStream
题目:建立一个文件输入流
package Basic.wordhard;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
try{
File f=new File("D://lol.txt");
FileInputStream fis=new FileInputStream(f);
// 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
4.以字节流的形式读取文件内容
InputStream是字节输入流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。
FileInputStream 是InputStream子类,以FileInputStream 为例进行文件读取
package Basic.wordhard;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
try{
File f=new File("d://lol.txt");
FileInputStream fis=new FileInputStream(f);
byte array[]=new byte[(int) f.length()];
fis.read(array);
for(byte e:array){
System.out.println(e);
}
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
5.以字节流的形式向文件写入数据顶折纠问
OutputStream是字节输出流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。
FileOutputStream 是OutputStream子类,以FileOutputStream 为例向文件写出数据
注: 如果文件d:/lol2.txt不存在,写出操作会自动创建该文件。
但是如果是文件 d:/xyz/lol2.txt,而目录xyz又不存在,会抛出异常
package Basic.wordhard;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
try{
File f=new File("D:\\lol2.txt");
FileOutputStream fos=new FileOutputStream(f);
byte Date[]={97,98};
fos.write(Date);
fos.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
6 .写入数据到文件
以字节流的形式向文件写入数据 中的例子,当lol2.txt不存在的时候,是会自动创建lol2.txt文件的。
但是,如果是写入数据到d:/xyz/lol2.txt,而目录xyz又不存在的话,就会抛出异常。
那么怎么自动创建xyz目录?
如果是多层目录 d:/xyz/abc/def/lol2.txt 呢?
package Basic.wordhard;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
try{
File f=new File("d:/xyz/abc/def");
if(!f.exists()){
f.mkdirs();
}
byte data[]={97,98};
File f1=new File(f,"lol2.txt");
FileOutputStream fos=new FileOutputStream(f1);
fos.write(data);
fos.close();
}catch (IOException e)
{
e.printStackTrace();
}
}
}