IO基础加强 day04

-----拷贝某个文件夹下所有该类型的文件到指定文件夹下

public static void main(String[] args){
File sourse = new File("c:/abc");
File target = new File("c:/abc/12");
//是文件夹再去遍历
if(sourse.isDirectory()){
File[] listFiles = sourse.listFiles();
for (File file : listFiles) {
//是wmv格式的文件
if(file.isFile()&&file.getName().endsWith(".wmv")){
try (
//创建可以自动关闭的资源
FileInputStream fis = new FileInputStream(new File(sourse,file.getName()));
FileOutputStream fos = new FileOutputStream(new File(target,file.getName()));
){
//每次读取的大小
byte[] b = new byte[1024];
int i = -1;
//判断读取到的内容是否为Null
while((i=fis.read(b))!=-1){
//写入(注意最后一次读取不一定有1024,所以我们应该取byte数组的lenth写入)
fos.write(b,0,i);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

}


--如果你会用idk1.8的lambda表达式的话

File[] listFiles = sourse.listFiles((dir,name)->{
return new File(dir,name).isFile() && name.endsWith(".wmv");

});

这样就可以直接把是.wmv的文件过滤出来,更加的方便简洁


-----获取进程数据   动态编译和运行java代码

public static void main(String[] args) throws Exception{
eval("System.out.println(\"hello\");");
}


private static void eval(String str) throws Exception {
File f = new File("hello.java");
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
sb.append(" public class hello{ ");
sb.append(" public static void main(String[] args){ ");
sb.append(str);
sb.append(" } ");
sb.append(" } ");
OutputStream os = new FileOutputStream(f);
os.write(sb.toString().getBytes());
os.close();
Process exec = Runtime.getRuntime().exec("javac hello.java");
//获取程序的错误信息
InputStream errorStream = exec.getErrorStream();
byte[] b = new byte[1024];
int i = -1;
while((i=errorStream.read(b))!=-1){
System.out.println(new String(b));
}
errorStream.close();
//当没有错误信息的时候就直接获取程序信息
Process exec2 = Runtime.getRuntime().exec("java hello");
InputStream inputStream = exec2.getInputStream();
int j = -1;
byte[] by = new byte[1024];
while((i=inputStream.read(by))!=-1){
System.out.println(new String(by));
}

}

题目核心在于拼接字符串,调用runtime执行线程的方法,先读取错误信息(因为手写字符串拼接容易出错,如果不打印错误信息,程序不执行也无法知道原因)

-----fileReader     字符输入流(字节流操作汉字或特殊字符容易乱码)

public static void main(String[] args) throws Exception{
//创建文件
File f = new File("1.txt");
//打开流
Reader re = new FileReader(f);

//操作,读取一个字符强转为char类型
// int read = re.read();
// System.out.println((char)read);
//用char[]数组接收(方式同inputStream)
// int i = -1;
// char[] c= new char[1024];
// while((i=re.read(c))!=-1){
// //打印char数组就是打印String
// System.out.println(c);
// }

//用char[]指定位置存储(每次读取参数3个字符装入参数2位置) 参数指 re.read(c,2,2)的参数位置
int i = -1;
char[] c= new char[4];
while((i=re.read(c,2,2))!=-1){
//打印char数组就是打印String
System.out.println(c);
}
//关闭流
re.close();
}

-----fileWriter     字符输出流(不用说了撒)

public static void main(String[] args) throws Exception{
//注意 writer类有一个flush方法(由于cpu直接访问磁盘效率极低,程序会创建一个内存缓冲区,
//当调用flush()时候会把内存的数据写入磁盘,以减少访问磁盘的次数)调用close方法之间会自动调用flush()
//创建文件
File f = new File("1.txt");
//打开流
FileWriter fw = new FileWriter(f);
//操作
//写出一个字符write(char c);
fw.write('A');
//写出多个字符write(char[] c);
fw.write("abcxc".toCharArray());
//写出一个字符串write(String str);
fw.write("abcxc");
//关闭流
fw.close();
}


猜你喜欢

转载自blog.csdn.net/qq_39205291/article/details/80559647
今日推荐