该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

3、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。

(大家正在做上面这道题,网上迟到的朋友也请做做这道题,找工作必须能编写这些简单问题的代码!)

答:listFiles方法接受一个FileFilter对象,这个FileFilter对象就是过虑的策略对象,不同的人提供不同的FileFilter实现,即提供了不同的过滤策略。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FilenameFilter;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class Jad2Java {

public static void main(String[] args) throws Exception {

File srcDir = new File("java");

if(!(srcDir.exists() && srcDir.isDirectory()))

throw new Exception("目录不存在");

File[] files = srcDir.listFiles(

new FilenameFilter(){

public boolean accept(File dir, String name) {

return name.endsWith(".java");

}

}

);

System.out.println(files.length);

File destDir = new File("jad");

if(!destDir.exists()) destDir.mkdir();

for(File f :files){

FileInputStream fis = new FileInputStream(f);

String destFileName = f.getName().replaceAll("\\.java$", ".jad");

FileOutputStream fos = new FileOutputStream(new File(destDir,destFileName));

copy(fis,fos);

fis.close();

fos.close();

}

}

private static void copy(InputStream ips,OutputStream ops) throws Exception{

int len = 0;

byte[] buf = new byte[1024];

while((len = ips.read(buf)) != -1){

ops.write(buf,0,len);

}

}

}

由本题总结的思想及策略模式的解析:

1.

class jad2java{

1. 得到某个目录下的所有的java文件集合

1.1 得到目录 File srcDir = new File("d:\\java");

1.2 得到目录下的所有java文件:File[] files = srcDir.listFiles(new MyFileFilter());

1.3 只想得到.java的文件: class MyFileFilter implememyts FileFilter{

public boolean accept(File pathname){

return pathname.getName().endsWith(".java")

}

}

2.将每个文件复制到另外一个目录,并改扩展名

2.1 得到目标目录,如果目标目录不存在,则创建之

2.2 根据源文件名得到目标文件名,注意要用正则表达式,注意.的转义。

2.3 根据表示目录的File和目标文件名的字符串,得到表示目标文件的File。

//要在硬盘中准确地创建出一个文件,需要知道文件名和文件的目录。

2.4 将源文件的流拷贝成目标文件流,拷贝方法独立成为一个方法,方法的参数采用抽象流的形式。

//方法接受的参数类型尽量面向父类,越抽象越好,这样适应面更宽广。

}

分析listFiles方法内部的策略模式实现原理

File[] listFiles(FileFilter filter){

File[] files = listFiles();

//Arraylist acceptedFilesList = new ArrayList();

File[] acceptedFiles = new File[files.length];

int pos = 0;

for(File file: files){

boolean accepted = filter.accept(file);

if(accepted){

//acceptedFilesList.add(file);

acceptedFiles[pos++] = file;

}

}

Arrays.copyOf(acceptedFiles,pos);

//return (File[])accpetedFilesList.toArray();

}

java编程题有难度的_算法与编程面试题 不喜勿喷 难度指数:*****...相关推荐

  1. java 7年_笃学私教:7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷!

    原标题:笃学私教:7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷! 趁着昨晚空闲和今早的时间,编辑这一篇帖子,写下当初我自学Java走的弯路,希望大家引以为戒,不要多走前人走过的弯路,浪费 ...

  2. 7年java水平_7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷

    7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷 原创编程仔日常2020-10-13 10:18:21 趁着昨晚空闲和今早的时间,编辑这一篇帖子,写下当初我自学Java走的弯路,希望大家引以 ...

  3. java中使用ElasticSearch聚合查询代码实例(个人笔记,不喜勿喷)

    PS→无奈:拥有梦想只是一种智力,实现梦想才是一种能力. 空闲之余就把先前做过的一个通过ElasticSearch的聚合来实现查询当月实际签到的天数记录一下,纯留下点记忆,大家勿喷. 1.如果不了解e ...

  4. Java开发私教_笃学私教:7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷...

    趁着昨晚空闲和今早的时间,编辑这一篇帖子,写下当初我自学Java走的弯路,希望大家引以为戒,不要多走前人走过的弯路,浪费时间.到今年年底结束,我做Java开发已经七年的时间了,现在月薪37k已经算知足 ...

  5. c语言编程题考试自动评分系统,C语言编程题考试自动评分系统简介.ppt

    C语言编程题考试自动评分系统简介 主要内容 教材简介 学习方法 机考系统简介 教材简介 教学理念的更新 教材简介 教材简介 国内55所院校使用 新版增加的内容 强化知识点.算法.编程方法与技巧 [编程 ...

  6. c语言编程题输入两个直角边,C语言编程 直角三角形已知两边求第三边

    C语言编程题 求大神解答 好久没写C了,不知道对不对:intsum=0;intindex=0;for(;indexsum+=a[2][index];}returnsum; C语言编程题,求分段函数 刚 ...

  7. 机器人离线编程画圆误差解决方案_机器人离线编程的误差来源分析与消除办法...

    随着机器人应用领域越来越广,传统的示教编程这种编程手段有些场合变得效率非常低下,于是离线编程应运而生,并且应用越来越普及.但初用离线编程的朋友,总会被最后生成轨迹的误差所困惑,而导致这些误差的原因,包 ...

  8. 浪潮编程题python石头排序_数分 | 沙滩排石头-浪潮提前批笔试 Java、C++、Python

    题目 沙滩摆放着一排大小不一的球形石头,已知第i个石头的半径为ri,不存在两个石头半径相等.现要求通过移动石头使摆放的石头从左往右半径递增.每次可选择一块石头,并把它放在剩下n-1块石头的最左边或最右 ...

  9. java中printarray和selectsort方法_算法题(一)

    目录 1 左神部分集锦 2 Leetcode前150题 3 牛客网剑指offer 4 JavaG 5 题目中的细节处理 1 左神部分集锦 1.1 Code01_FindNumber_B_In_A 在有 ...

最新文章

  1. nero结果,对应的分析。如下。
  2. 江苏省三级偏软考试大纲
  3. NR 5G UE发起的去注册流程
  4. Aptana Studio 3 汉化简体中文版
  5. [html] 写页面布局时需要考虑哪些方面的因素?
  6. [转] 一文弄懂神经网络中的反向传播法——BackPropagation
  7. c语言编写两个矩阵的乘积,如何用c语言编写两个模糊矩阵相乘的程序?
  8. 关于FragmentManager动态管理Fragment时Fragment生命周期的探究
  9. 桌面应用程序 azure_如何在Azure中连接我们的C#应用​​程序
  10. 适用于vue的移动端table插件_vue-mobile
  11. html5手机详情页,H5网页打开app内部详情页
  12. java word文件转图片
  13. 摩尔庄园怎么显示全部服务器,摩尔庄园手游服务器查看区别方法
  14. as打开时出现The environment variable JAVA_HOME (with The value of C:\Java\jdk1.8.0_101\bin) does not poin
  15. java post 405 错误
  16. 软件破解简单示例演示
  17. 谷歌chrome浏览器 - 关于插件,这一篇就够了
  18. 第一模块 jdk与jre、==与equals、Math.round(-1.5)、 String、操作字符串的类、字符串反转、抽象类必须要有抽象方法吗、普通类和抽象类、BIO NIO AIO
  19. java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法
  20. HTML及CSS学习笔记 06 - CSS简介和常见的选择器

热门文章

  1. 2021-09-25
  2. 推荐一款好工具:16进制字节搜索工具 C#的效率
  3. 题目2:隐式图的搜索问题(A*算法解决八数码)
  4. 1.2 String字符串和整型int的相互转换,valueOf() 、parse()和toString()
  5. 2.2 进阶-禁忌雷炎
  6. 1030 Travel Plan (30 分) 【难度: 中 / 知识点: 最短路】
  7. ppt的一些基础操作
  8. Java多线程(1)—线程初探
  9. Oracle 的基本特点,并完整描述安装过程
  10. Spring boot自动注册DispatcherServlet