package com.demo;
import java.io.File;
import java.io.IOException;
/*
在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目
录IOTest,之后将HelloWorld.txt移动到IOTest目录下去;之后遍历IOTest这个目录下的文
件
*/
public class Demo01 {
public static void main(String[] args) {
File file = new File("d:/HelloWorld.txt");
File dir = null;
if (file.exists() && file.isFile()) {
dir = new File("d:/IOTest");
if (dir.exists()) {
file.renameTo(new File(dir.getAbsolutePath() + file.getAbsolutePath().substring(2)));
System.out.println("移动成功,以下是遍历IOTest目录下的所有文件");
findAll(dir);
}else {
System.out.println("目录不存在,正在创建文件,请重新运行");
dir.mkdir();
}
}else {
System.out.println("文件不存在,正在创建文件,请重新运行");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void findAll(File file) {
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()) {
findAll(f);
}
System.out.println("file:" + f.getAbsolutePath());
}
System.out.println("dir:" + file.getName());
/*
* 输出时的空文件与目录会有重合
*/
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.File;
import java.util.Scanner;
/*
* 递归实现输入任意目录,列出文件以及文件夹
*/
public class Demo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//请输入一个正确的目录路径
System.out.println("Please enter a correct directory path:");
String dir = scanner.nextLine();
// \w单词字符
String regex = "[CDF]:/[\\w*/*]*";
File tar = new File(dir);
boolean flag = dir.matches(regex);
if (flag) {
findAll(tar);
}else {
System.err.println("Error!Please enter a correct directory path!!!");
}
}
public static void findAll(File file) {
if (file.exists()) {
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()) {
findAll(f);
}
System.out.println(f.getAbsolutePath());
}
}else {
System.err.println("File is not exists!!!");
}
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.File;
import java.io.FilenameFilter;
/*
* 递归实现列出当前工程下所有.java文件
*/
public class Demo03 {
public static void main(String[] args) {
FileJava(new File("F:\\workspace\\第一阶段\\days01\\0801"));
}
public static void FileJava(File file) {
/*FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File nowFile = new File(dir,name);
if (nowFile.isFile() && name.endsWith(".java")) {
return true;
}
return false;
}
};*/
if (file.exists()) {
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()) {
FileJava(f);
}
if (f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
}
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
/*
* 从磁盘读取一个文件到内存中,再打印到控制台
*/
public class Demo04 {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("F:\\workspace\\第一阶段\\days01\\0804\\src\\com\\demo\\Demo04.java");
byte[] bs = new byte[1024];
int len = 0;
while ((len = fis.read(bs)) != -1) {
System.out.println(new String(bs));
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/*
* (五) 在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中
*/
public class Demo05 {
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("d:/Hello.txt");
Scanner sc = new Scanner(System.in);
System.out.println("please enter your words:");
String in = sc.nextLine();
fw.write(in);
fw.close();
System.out.println("write success!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)
*/
public class Demo06 {
public static void main(String[] args) {
try {
/*
* 我是创建好的文件,如果你想要的让系统创建,可以把两个文件名取出来,
* 然后创建要拷贝过去的文件,
* 最后再写入
*/
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("d:/linyuner.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("d:/IOTest/linyuner.jpg"));
byte[] bs = new byte[1024];
int len = 0;
while((len = bis.read(bs)) != -1) {
bos.write(bs);
}
bos.close();
bis.close();
System.out.println("拷贝完毕");
} catch (IOException e) {
e.printStackTrace();
}
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
/*
* 统计一个文件calcCharNum.txt(见附件)中字母'A'和'a'出现的总次数
*/
public class Demo07 {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("d:/calcCharNum.txt");
int len = 0;
char[] c = new char[5];
String str = "";
while ((len = fr.read(c)) != -1) {
str = str + new String(c);
}
int countA = 0;
int counta = 0;
for (int i = 0; i < str.length(); i++) {
char d = str.charAt(i);
if (d == 'A') {
countA++;
}else if (d == 'a') {
counta++;
}else {
continue;
}
}
System.out.println("A count = " + countA + ",a count = " + counta);
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.IOException;
import java.io.RandomAccessFile;
/*
* 使用随机文件流类RandomAccessFile将一个文本文件倒置读出。
* [注]是一个字母或数字是占用一个字节的, 一个汉字是占用两个字节的
* 本题参照 老邱
*/
public class Demo08 {
public static void main(String[] args) {
try {
RandomAccessFile raf = new RandomAccessFile("d:/calcCharNum.txt", "r");
StringBuilder sBuilder = new StringBuilder();
long length = raf.length();
while (length > 0) {
length--;
raf.seek(length);//seek设定读取指针的位置,与文件开头相隔pos个字节数
int c = (char) raf.readByte();
// 如果asc码<=255,>=0,则判断是个英文字符,添加到字符串中.
if (c >= 0 && c <= 255) {
sBuilder.append((char) c);
} else {
// 如果不在asc码范围内,则判断是个汉字字符
// 汉字字符是占2个字节的,所以length再退一个字节
length--;
raf.seek(length);
byte[] cc = new byte[2];
// cc被复制为文件中连续的两个字节
raf.readFully(cc);
//readFully(byte[] b)
//将 b.length 个字节从此文件读入 byte 数组,并从当前文件指针开始。
sBuilder.append(new String(cc));
}
}
System.out.println(sBuilder);
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.util.Scanner;
/*
*【补充】 显示文件内容命令——type命令
1、格式:type [盘符:] [路径] 文件名
2、类型:内部命令
3、功能:把指定的文件内容在屏幕上显示或打印机输出,它常用作查阅和显示文本文件的内容和打印清单。
【正题】 编写一个Java应用程序,可以实现Dos中的type命令,并加上行号。
即将文本文件在控制台上显示出来,并在每一行的前面加上行号。
*/
public class Demo09 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("please enter your type order:");
String in = sc.nextLine();
/*
* d:/calcCharNum.txt
*/
RandomAccessFile rsf = new RandomAccessFile(in.substring(5), "r");
int count = 1;
String str = "";
/*
* 嗯,汉字输出控制台出现乱码现象
*/
while ((str = rsf.readLine()) != null) {
System.out.println(count + "." + str);
}
rsf.close();
}
}
**********************************************************************************************************************************************
package com.demo;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/*
* 查看D盘中所有的文件和文件夹名称,并且使用名称升序降序,文件夹在前和文件夹在
后,文件大小排序等。
【注】 本题也是参照 老邱
*/
public class Demo11 {
public static void main(String[] args) {
List<File> list = getAllFiles("d:");
//按文件夹先显示的顺序:
Collections.sort(list,new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return (o2.isDirectory()?1:-1)-(o1.isDirectory()?1:-1);
}
});
//按文件名称显示的顺序:
Collections.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return (o1.getName()).compareTo(o2.getName());
}
});
//按文件名称显示的顺序:
Collections.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return (int)(o1.length()-o2.length());
}
});
//遍历集合的文件
for (File file : list) {
//打印排序后的文件或文件夹
System.out.println(file.getName());
}
}
//获取文件夹下所有的文件
public static List<File> getAllFiles(String dir){
//创建一个集合存放遍历到的File
List< File >files=new ArrayList<File>();
File file=new File(dir);
//文件夹必须存在 并且要是文件夹
if (file.exists()&&file.isDirectory()) {
//重点! 这里要本身一直遍历
longErgodic(file,files);//把遍历得到的东西存放在files里面
}
return files;
}
//重点理解,这是一个递归方法,会不断来回调用本身,但是所有获得的数据都会存放在集合files里面
private static void longErgodic(File file, List<File> files) {
//.listFiles()方法的使用
//把文件夹的所有文件(包括文件和文件名)都放在一个文件类的数组里面
File[] fillArr=file.listFiles();
//如果是一个空的文件夹
if (fillArr==null) {
//后面的不执行,直接返回
return;
}
//如果文件夹有内容,遍历里面的所有文件(包括文件夹和文件),都添加到集合里面
for (File file2 : fillArr) {
//如果只是想要里面的文件或者文件夹或者某些固定格式的文件可以判断下再添加
files.add(file2);
//添加到集合后,在来判断是否是文件夹,再遍历里面的所有文件
//方法的递归
longErgodic(file2, files);
}
}
}