才开始学习java,一直对其中的类库含混不清。听前辈们说一定要多看java-doc 可是还是有些懒,没有好好研读,所以就出问题了。
这次是文件操作方面: 判断文件类的类型,我想应该就是把文件名这个字符串处理一下,以“.”为分隔符分成两段,把后面的字符串输出即可。
找了下String 类里面的方法,果不其然发现了split()
————————————————搬运工————————————————
split
public String[] split(String regex)
根据给定 正则表达式的匹配拆分此字符串。
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。
例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:
Regex
结果
:
{ "boo", "and", "foo" }
o
{ "b", "", ":and:f" }
参数:
regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException - 如果正则表达式的语法无效 —————————————————————————————————来自 JDK API 1.6
看完后,还没弄懂什么是 “正则表达式”,就开始敲代码。
想法是:定义一个数组对象来保存结果,然后调用方法,输出第二个字符串即可(前提是输入标准,如“test.txt”)
可是之后居然显示:数组越界。简直不能忍!调试了一下,发现返回数组长度居然是0!
以下截取了一部分错误代码:
String sfile;
String[]resolve= new String[20];
resolve = sfile.split(".");
output3.setText("文件类型"+ resolve[0]);
后来去查了查正则表达式,原来 “.” 在其中是由特殊意义的,所以其实在例子“test.txt”中并没有分成{“test”,“txt”}。 如果要使用需要:
把“.” 改成 “\\.”就OK啦!
具体为什么其实我也不是很清楚,但是作为个初学者,先记下来吧。
附上 正则表达式的百度词条:什么是正则表达式?
好了,以下是我所有代码:(如果你是老手就请无视吧。)
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class FileDetail extends Applet implements ActionListener
{
Label prompt;
TextField input,output1,output2,output3;
String[] resolve = new String[20];
String sfile;
public void init()
{
prompt = new Label("请输入文件名: ");
input = new TextField(10);
output1 = new TextField(28);
output2 = new TextField(20);
output3 = new TextField(20);
add (prompt);
add (input);
add (output1);//其实是最后一次修改时间,而非创建时间
add (output2);//文件长度
add (output3);//文件类型,这是这一次的关键
input.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
sfile = input.getText();
File f1 = new File("D:\\",sfile);// 在D盘新建文件
try {
f1.createNewFile();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
long time = f1.lastModified();
String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(time));
output1.setText("创建时间 "+ctime);
output2.setText("文件长度 "+f1.length() );
resolve = sfile.split("\\.");
System.out.println( resolve.length);
try {
output3.setText("文件类型 "+ resolve[1].toString());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}