如何判断存储卡是否存在问题。
public boolean savaInfor() {
boolean flag=true;
new Thread(new Runnable() {
public void run() {
// 定义文件的记录
String string = " ";
try {
// RMS记录对象
RecordStore rs;
// 打开记录对象
rs = RecordStore.openRecordStore( "filename ", true);
// 获取记录总数
int num = rs.getNumRecords();
if (num != 0) {
// 获取一个记录
filename = new String(rs.getRecord(1), "UTF-8 ");
}
// 关闭记录对象
rs.closeRecordStore();
// 打开文件,读取文件的内容
FileConnection fc = (FileConnection) Connector
.open(Constants.FILE_WRITER_FILEPATH + filename);
// 打开输入流
InputStream fis = fc.openInputStream();
// 定义一个长度为输入流文件长度的字节空间
byte[] b = new byte[(int) (fc.fileSize())];
// 取得文件的字节长度
int byteLength = (int) fc.fileSize();
int length = 0;
// 读取字节长度
length = fis.read(b, 0, b.length);
// 关闭输入流
fis.close();
// 关闭文件链接
fc.close();
// 文件里有记录
if (length > 0) {
// 把文件内容转化为字符串类型
string = new String(b, 0, length, "UTF-8 ");
}
// 文件长度限制
if (byteLength > 4096) {
// 新文件存储前为空
string = " ";
// 记录对象
rs = RecordStore.openRecordStore( "filename ", true);
// 如果存在记录对象
if (rs.getNumRecords() != 0) {
// 得到记录对象里的文件名
filename = new String(rs.getRecord(1), "UTF-8 ");
// 创建新的文件名
String name = Integer.toString(Integer
.parseInt(filename.substring(3, 7)) + 1);
filename = "KJT " + zeroFormat(name, 4) + ".txt ";
}
if (rs.getNumRecords() != 0) {
// 存入新的文件名覆盖以前的文件名
rs.setRecord(1, filename.getBytes( "UTF-8 "), 0,
filename.length());
} else {
// 存入新的文件名
rs.addRecord(filename.getBytes( "UTF-8 "), 0,
filename.length());
}
// 关闭对象
rs.closeRecordStore();
}
} catch (Exception e) {
System.out.println( "askdjalskdfjaslkdjfalskd ");
e.getMessage();
flag = false;
return flag;
}
}
}).start();
System.out.println(flag);
return flag;
}
当e盘即存储卡不存在时。通过异常来返回给form一个bool值,但每次返回的都是true。如何解决。
就是如何通过程序判断存储卡是否存在。
[解决办法]
lz对thread的理解不完善阿。
public boolean savaInfor() {
boolean flag=true;
thread.start();//简化代码 flag=false;
return flag;
}
你在方法里的thread仅仅是start了,不一定马上就run阿,而你方法却马上返回flag,当然大部分都应该是true,因为run还没有执行。run何时执行不是程序说了算的。
lz为什么要在这个方法里开个线程来执行文件操作???是想不影响其他线程速度吗?
那用线程执行,为什么要返回一个标识flag?
既然需要返回标识进行判断,那就没必要另其线程,直接写到方法里。
另外个人也不喜欢lz如此的写thread,声明和调用写到一起,代码上不清晰,而且别处要调用该thread也不好办。
尽量少的用thread,比较耗内存。
saltedfish
[解决办法]
是可以起线程另外执行文件操作,把更新界面的方法放到该线程中run里的最后。线程执行完了,再调用相应界面操作。
比如savaInfor方法,只改变canvas中的一个等待标识变量flag为true,而canvas的paint中判断如果flag为true,就画一个等待界面或者其他界面,否则就执行其他画屏操作。
而savaInfor所调用的那个文件存储thread的run的最后再把flag该为false,就可以让画屏操作继续运行下去画存储成功后的界面,不会死等。
只是个思路,你参考一下。
但画屏线程一般都是独立的,不会和其他按键线程冲突,不很清楚你的设计。
saltedfish