文章列表
初探文件搜索器
一.效果
我用的笔记本是win7系统的,它自带的文件搜索功能虽然方便,但速度太慢,
常常搜索一个文件要等好几分钟,甚至几十分钟,相信大家也有过体验。
我用java写了一个简单的FileSearcher,发现它的速度比win7自带搜索器快很多,往往几秒钟就搜完了。
以图为证:
二.文件查找方法
下面简单介绍我的代码实现:
核心部分是利用递归算法,不断地列出当前目录(parent)下的子文件,判断子文件类型,若是目录,则继续递归;若是真实文件,则判断文件名中是否含有所需查找的关键字。
/**
* 搜索文件方法
*
* @par ...
这是三天来一直困扰我的问题,在做程序时,我应该是一步一步走,怎样能做出效果就怎样写代码,还是思考再三,设计出一种好的程序结构,试程序具有更好的扩展性,而且不需要传递很多参数。
其实,这两种 ...
计算机中两种基本的数据结构式数组及链表,前者是在自然顺序的内存中存储数据,而后者是通过其基本单元——节点的数据域和指针域来存储数据和记录数据间的相对位置,概括地说:数组中的数据位置是连续的,链表中的数据位置是离散的。
这就决定了,在数组中找一个数据很容易(只需知道数组首地址及数据在数组中的位置);而在链表中改变数据的相对位置很容易(只需改变个别节点的指针域就行)。他们各有优势,也各有劣势,并且优势与劣势恰好相反。
正是这一不同决定了用他们来实现队列时,队列的优势与劣势。
队列的特点是可以改变长度(存储 ...
当我们为一个组件添加事件监听器的时候,常常需要写一个该监听器的实现类,在这个实现类内部写事件处理方法。 而其中比较麻烦的一点就是我们需要将事件源及其他一些参数传入到这个实现类中,而且在实现类中定义相应的属性来保存这些参数,以便在事件处理方法中使用。当需要传入的参数比较多时,这样的方法显然不太方便。
通过内部类创建监听器则能比较好地解决这一问题。示例如下:
// 通过内部类创建滑条监听器
jsR.addChangeListener(new ChangeListener() {
public void stateChanged(Chang ...
今天做了简单画图板,要重绘一个对象类的数组,出现了一个空指针问题:还没对对象类的数组进行实例化,就重绘啦,而重绘中有用到那个数组,因而出现了空指针异常。
在同学的启发下,我觉得在重绘方法中,使用数组前先对数组进行初始化,关键来啦,初始化时,对其参数进行设置,比如type=-1(我们不使用的类型),接下来if(type==-1),就结束重绘。这样就解决了,窗体打开时的那次重绘造成的空指针异常。
下面是我的解决方案:
public void paint(Graphics g) {
super.paint(g);
int x1,y1,x2,y2;
//如果数组为空指 ...
写程序时我老是想一口气把所有细节都实现啦,写着写着还会想:要不再加个功能吧,如果能那样的话会显得更NB......弄到最后连最基本的东西都没搞成,更别说其他的啦。
问题是复杂的,但解决问题的方法是简单的,只要我们一步一步剖析问题,再一步一步尝试去实现,从简单到复杂,问题就能能比较好得解决啦。嗯,应该是这样
编程时,对于一些数学规律比较强的问题,最好先花些时间好好地把里面的逻辑搞清楚,不要马上就急不可耐地开始写代码,然后发现错了又没头没脑地乱改一气,把自己搞得稀里糊涂(其实说得就是我)
如果能把问题的数学逻辑搞清楚,那么写代码时就会思路清晰,明白如何组织语句把问题解决,就算出错啦也比较容易迅速找到错误的关键,最后就能轻松解决问题啦。
最后,我有点标题党的嫌疑。
Java 中窗体打开时会进行自动重绘,所以如果你画在画布上的东西与初始化画布的代码写在一起的话,会出现你的“画画”闪了一下就不见了,或者根本就看不到。其实,只要你你写的东西是在窗体打开之后立即就“画画”,都会出现以上结果。
解决的办法之一是重写重绘方法,把你要画的内容写在重绘方法里面。但如果绘制的东西比较多,则会出现连续绘制几次的现象,看得很不顺眼。
另一个办法是为某种事件(如鼠标单击)添加事件监听器,当该事件发生时才开始“画画”,这样就不会“看得不顺眼”了,但由于没有重绘,把窗体最小化之后就什么都没有啦