1.练习:在D盘中a/b/c创建一个文件,名称叫HelloWorld.java
import java.io.File;
import java.io.IOException;
/*1.练习:在D盘中a/b/c创建一个文件,名称叫HelloWorld.java*/
//没D盘,用F盘替代了
public class Demo02 {
public static void main(String[] args) throws IOException {
File f = new File("F:/a/b/c");
f.mkdirs();
File file = new File(f,"HelloWorld.java");
file.createNewFile();
}
}
2.使用renameTo()方法的时候,目标文件不能真实存在,否则无效.
3.键盘录入一个字符串,表示一个文件夹路径,如果不是文件夹提示重新录入,打印当前文件夹下,所有的大于10M的后缀名名为.mp4文件的绝对路径。
isDirectory() listFiles() length() getName().endWiths(“mp4”) getAbsoultPath()
import java.io.File;
import java.util.Scanner;
/*3.键盘录入一个字符串,
表示一个文件夹路径,如果不是文件夹提示重新录入,
打印当前文件夹下,所有的大于10M的后缀名名为.mp4文件的绝对路径。*/
public class Demo03 {
public static void main(String[] args) {
boolean flag;
do {
flag = false;
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个文件夹路径:");
String dir = sc.nextLine();
File file = new File(dir);
if(file.isDirectory()) {
printAbsolutePath(file);
}else {
System.out.println("您的输入有误,请重新录入!");
flag = true;
}
}while(flag);
}
//打印当前文件夹下,所有的大于10M的后缀名名为.mp4文件的绝对路径
private static void printAbsolutePath(File file) {
File[] files = file.listFiles();
for(File f : files) {
if(f.length()>10*1024*1024 && f.getName().endsWith(".mp4")) {
System.out.println(f.getAbsolutePath());
}
}
}
}
4.键盘录入一个文件夹路径,打印这个文件夹下的所有文件的绝对路径(包含子文件夹的内容)
import java.io.File;
import java.util.Scanner;
/*4.键盘录入一个文件夹路径,
打印这个文件夹下的所有文件的绝对路径(包含子文件夹的内容)*/
public class Demo04 {
public static void main(String[] args) {
boolean flag;
do {
flag = false;
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个文件夹路径:");
String dir = sc.nextLine();
File file = new File(dir);
if(file.isDirectory()) {
printAllAbsolutePath(file);
}else {
System.out.println("您的录入有误,请重新录入!");
flag = true;
}
}while(flag);
}
private static void printAllAbsolutePath(File file) {
File[] files = file.listFiles();
for(File f : files) {
if(f.isFile()) {
System.out.println(f.getAbsolutePath());
}else {
printAllAbsolutePath(f);
}
}
}
}
5.输入输出流是站在内存的角度上看的!站在内存的角度看待方向,从其它设备进入到内存的,都是输入,从内存到其它设备,都是输出。
6.字节流的复制粘贴操作
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/*字节流的复制粘贴操作*/
public class Demo05 {
public static void main(String[] args) throws Exception {
File srcFile = new File("F:\\BigData\\课程资料\\正在学习\\大数据1028班\\笔记\\笔记day01.doc");
File destFile = new File("F:\\BigData\\课程资料\\正在学习\\大数据1028班\\01.doc");
double srcLength = srcFile.length();
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] byt = new byte[1024];
int len = 0;
//fis.read(byt)将字节读入数组
while((len = fis.read(byt))!=-1) {
fos.write(byt,0,len);
double destLength = destFile.length();
System.out.println((int) (100*Double.valueOf(String.format("%.2f", destLength/srcLength)))+"%");
}
fis.close();
fos.close();
}
}
7.字符流的赋值粘贴操作
8.字节流可以拷贝视频和音频等文件,那么字符流可以拷贝这些吗? 经过验证拷贝图片是不行的。发现丢失了信息,为什么呢?计算机中的所有信息都是以二进制形式进行的存储(1010)图片中的也都是二进制。在读取文件的时候字符流自动对这些二进制按照码表进行了编码处理,但是图片本来就是二进制文件,不需要进行编码。有一些巧合在码表中有对应,就可以处理,并不是所有的二进制都可以找到对应的,这时信息就会丢失。所以字符流只能拷贝以字符为单位的文本文件。(以ASCII码为例是127个,并不是所有的二进制都可以找到对应的ASCII,有些对不上的,就会丢失信息。)
作业
1、键盘录入一个文件夹路径,删除该文件夹(包含文件夹内容)
File里面的length()方法
long | length() 返回由此抽象路径名表示的文件的长度。 |
返回由此抽象路径名表示的文件的长度。 如果此路径名表示目录,则返回值未指定。
import java.io.File;
import java.util.Scanner;
/*1、键盘录入一个文件夹路径,删除该文件夹(包含文件夹内容)*/
public class Test01 {
private static Scanner sc;
public static void main(String[] args) {
boolean flag;
do {
flag = false;
sc = new Scanner(System.in);
System.out.println("请录入一个文件夹路径(包含文件夹内容):");
String dir = sc.nextLine();
File file = new File(dir);
if(file.isDirectory()) {
deleteDir(file);
}else {
System.out.println("您的录入有误,请重新录入!");
flag = true;
}
}while(flag);
}
private static void deleteDir(File file) {
File[] files = file.listFiles();
for(File f : files) {
if(f.isFile()) {
f.delete();
}else {
deleteDir(f);
}
}
file.delete();
//卧槽,循环结束之后一定要记得删空文件夹啊,我说咋一直错
}
}
2、键盘录入一个文件夹路径,统计该文件夹下的各种后缀名的文件的个数
例如:.txt有10个,.java有30个......
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
/*键盘录入一个文件夹路径,统计该文件夹下的各种后缀名的文件的个数
例如:.txt有10个,.java有30个......*/
public class Test02 {
private static Map<String,Integer> map = new HashMap<String,Integer>();
public static void main(String[] args) {
boolean flag;
do {
flag = false;
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个文件夹路径(包含文件夹内容):");
String dir = sc.nextLine();
File file = new File(dir);
if(file.isDirectory()) {
count(file);
for(Entry<String,Integer> entry : map.entrySet()) {
System.out.println(entry.getKey()+"有" + entry.getValue() + "个");
}
}else {
System.out.println("您的录入有误,请重新录入!");
flag = true;
}
}while(flag);
}
//自定义方法
private static void count(File file) {
File[] files = file.listFiles();
for(File f : files) {
if(f.isFile()) {
String[] names= f.getName().split("\\.");
/*"."匹配所有字符要加\\转义*/
String key = "." + names[names.length-1];
map.put(key,map.containsKey(key)?map.get(key)+1:1);
}else {
count(f);
}
}
}
}
3、键盘录入一个文件夹路径,作为源文件夹;键盘录入一个文件夹路径,作为目标文件夹
写代码将源文件夹拷贝到目标文件夹中
a
b
b/a
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.util.Scanner;
import org.omg.CORBA.portable.OutputStream;
/*3、键盘录入一个文件夹路径,作为源文件夹;键盘录入一个文件夹路径,作为目标文件夹
写代码将源文件夹拷贝到目标文件夹中
a
b
b/a*/
public class Test03 {
public static void main(String[] args) throws Exception {
String dir1 = inputDir();
File srcDir = new File(dir1);
String[] dir1_arr = dir1.split("\\\\");
String dir2 = inputDir();
dir2 = dir2 + "\\" +dir1_arr[dir1_arr.length-1];
File destDir = new File(dir2);
destDir.mkdir();
copyDir(srcDir,destDir);
}
private static void copyDir(File srcDir, File destDir) throws Exception {
File[] files = srcDir.listFiles();
if(files == null) {return;}
for(File f : files) {
File srcFile = f;
File destFile = new File(destDir,f.getName());
if(f.isFile()) {
copyFile(srcFile,destFile);
}else {
destFile.mkdir();//每次要新建目录
copyDir(srcFile,destFile);
}
}
}
private static void copyFile(File srcFile, File destFile) throws Exception {
BufferedReader br = new BufferedReader(new FileReader(srcFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(destFile));
String str = "";
while((str = br.readLine())!=null) {
bw.write(str);
bw.newLine();
}
br.close();
bw.close();
/*InputStream is = new FileInputStream(srcFile);
FileOutputStream os = new FileOutputStream(destFile);
byte[] b = new byte[1024];
int len = 0;
while((len = is.read(b))!=-1) {
os.write(b,0,len);
os.flush();
}
os.close();
is.close();*/
}
private static String inputDir() {
boolean flag;
String dir;
do {
flag = false;
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个文件夹路径:");
dir = sc.nextLine();
File file = new File(dir);
if(!file.isDirectory()) {
System.out.println("您的录入有误,请重新录入!");
flag = true;
}
}while(flag);
return dir;
}
}
4 在D盘下的a/b/c/d中创建一个文件,名称叫HelloWorld.txt
import java.io.File;
import java.io.IOException;
/*在D盘下的a/b/c/d中创建一个文件,名称叫HelloWorld.txt*/
public class Test04 {
public static void main(String[] args) throws IOException {
File f = new File("F:/a/b/c");
f.mkdirs();
File file = new File(f,"HelloWorld.txt");
file.createNewFile();
}
}
5 键盘录入一个字符串,表示一个文件夹路径,如果不是文件夹路径则提示重新录入
打印当前文件夹下,所有的大于20M的后缀名是.mp4的文件的绝对路径
import java.io.File;
import java.util.Scanner;
/*5 键盘录入一个字符串,表示一个文件夹路径,如果不是文件夹路径则提示重新录入
打印当前文件夹下,所有的大于20M的后缀名是.mp4的文件的绝对路径*/
public class Test05 {
public static void main(String[] args) {
boolean flag;
do {
flag = false;
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个文件夹路径:");
String dir = sc.nextLine();
File file = new File(dir);
if(file.isDirectory()) {
printAbsolutePath(file);
}else {
System.out.println("您的输入有误,请重新录入!");
flag = true;
}
}while(flag);
}
private static void printAbsolutePath(File file) {
File[] files = file.listFiles();
for(File f : files) {
if(f.length()>20*1024*1024 && f.getName().endsWith(".mp4")) {
System.out.println(f.getAbsolutePath());
}
}
}
}
6 用代码实现以下需求
(1)有如下字符串"If you want to change your fate I think you must come to the ujiuye to learn java"(用空格间隔)
(2)打印格式:
to=3
think=1
you=2
//........
- 按照上面的打印格式将内容写入到D:\\count.txt文件中(要求用高效流)
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
/*6 用代码实现以下需求
(1)有如下字符串"If you want to change your fate I think you must come to the ujiuye to learn java"(用空格间隔)
(2)打印格式:
to=3
think=1
you=2
//........
(3)按照上面的打印格式将内容写入到D:\\count.txt文件中(要求用高效流)*/
public class Test06 {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("F:/count.txt"));
String str = "If you want to change your fate I think you must come to the ujiuye to learn java";
Map<String,Integer> map = new LinkedHashMap<String,Integer>();
String[] strs = str.split(" ");
for(int n = 0; n < strs.length;n++) {
String key = strs[n];
Integer value = map.containsKey(key)?map.get(key)+1:1;
map.put(key, value);
}
for(Entry<String,Integer> entry : map.entrySet()) {
String s = entry.getKey() + "=" + entry.getValue();
bw.write(s);
bw.newLine();
System.out.println(s);
}
bw.close();
}
}
7 产生10个1-100的随机数,并放到一个数组中
(1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
(2)把数组中的数字放到当前文件夹的number.txt文件中
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
/*产生10个1-100的随机数,并放到一个数组中
(1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
(2)把数组中的数字放到当前文件夹的number.txt文件中*/
public class Test07 {
public static void main(String[] args) throws Exception {
BufferedWriter bw = new BufferedWriter(new FileWriter("number.txt"));
Random r = new Random();
int[] arr = new int[10];
ArrayList<Integer> list = new ArrayList<Integer>();
for(int n = 0; n < 10;n++) {
int num = r.nextInt(100)+1;
arr[n] = num;
if(arr[n] >= 10) {
list.add(arr[n]);
}
}
for(Integer num : list) {
System.out.println(num);
bw.write(Integer.toString(num));
bw.newLine();
}
bw.close();
}
}