java中一些知识点
注:
[Android API](file:///C:/Users/silen/AppData/Local/Android/sdk/docs/guide/index.html)
1.对象输入输出流
2.涉及到流对象一定注意异常处理(捕捉并抛出异常),否则报错。两种方式:
方式一:try...catch;
方式二:throw FileNotFoundException/IOException/ClassNotFoundException;
若含有多种异常,可以采用throw Exception;
例:
//方式二
public Object InputObject() throws Exception{
Object feature = new Object();
File file = new File("sdcard/detectmoney/database", "data.txt");
//文件输出流
FileInputStream fin = new FileInputStream(file);
//对象输出流
ObjectInputStream obin = new ObjectInputStream(fin);
//保存对象到文件
feature = obin.readObject();
obin.close();
return feature;
}
//方式一
public Object InputObject(){
Object feature = new Object();
File file = new File("sdcard/detectmoney/database", "data.txt");
try{
//文件输出流
FileInputStream fin = new FileInputStream(file);
//对象输出流
ObjectInputStream obin = new ObjectInputStream(fin);
//保存对象到文件
feature = obin.readObject();
obin.close();
}catch(FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return feature;
}
3.读取保存在文件中对象:
(1) readObject()位于Java.io.ObjectInputStream。声明为:
public final Object readObject();
由此可看出返回值为Object类型。
(2)为了提取存储的信息,需要读取得到Object对象后转化为存储前的对象类型。
//强制转化
Feature feature = (Feature) new OutputFeature().InputObject();
错误:
Feature[] feature = (Feature[]) object;//Object[] object是存储feature对象的数组
错因:Java.lang.ClassCastException,即类转化错误,无法由Object[]转化到Feature[]
解决方法:单个转化
Feature feature = (Feature) object[0];
//若要进行整个数组转化可利用循环逐个元素对应转化
(3)如果A程序需要读取B程序中生成的对象输出流文件时必须导入B程序中相应的类,不可重新定义类。导入相应类时注意其包名不可变,即带包导入。如果改变包名就变成了新建类,与原先类是有差别的,无法读取对象(因为对象存储时是包含相应类信息的)。
4.数组输出方法:
Arrays.toString(数组)
Arrays.deepToString()
5.String转化为char[]:
str.toCharArray();
6.提示框设置:
Toast.makeText(context, str, time).show();
//context:当前的上下文环境。可用getApplicationContext()或this
//str:要显示的字符串。可以时自定义字符串,也可是R.string中字符串ID
//time:显示的时间长短。Toast默认的有两个LENGTH_LONG(长,3500ms)和LENGTH_SHORT(短,2000ms),也可以使用毫秒如2000ms
7.输出程序执行时间(time)
long start=System.currentTimeMillis();
long time = System.currentTimeMillis() - start;
//Log.v/d/i/w/e属于在控制台输出
//若要在手机界面输出可用TextView或EditText或者Toast
8.判断文件存在与否
(1)每次执行File f =new File(文件目录); 时,如果文件不存在,则都会自动创建文件;若存在则不会创建。
(2)对比(1)执行File f =new File(目录);时,如果目录不存在则不会创建目录。
(3)输出流语句FileOutputStream fout = new FileOutputStream(file); 会创建新空白文件,故如果要读取原来文件中信息,必须放在该句之前,否则会覆盖原来的文件,导致原来的文件信息缺失。
(4)对比(3):FileInputStream fin = new FileInputStream(file);则不会创建新文件
故判断某文件或目录是否存在,不存在则创建用以下写法:
//文件:
if(!new File(文件目录).exists()) f = new File(文件目录); //因为匿名对象并不实例化
//目录:
File f =new File(目录);
if(!f.exists()) f.mkdirs(); //注意用mkdirs(),尽量不用mkdir()。因为前者可创建多级目录