首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

怎么判断存储卡是否存在有关问题

2012-01-16 
如何判断存储卡是否存在问题。publicbooleansavaInfor(){booleanflagtruenewThread(newRunnable(){public

如何判断存储卡是否存在问题。
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

热点排行