0

フォルダーを監視して特定のファイルを検出し、その内容を読み取ることができるサービスを Android に実装する必要があります。コードに奇妙な動作があり、その理由がわかりません。これは私の関連コードです。

public void onCreate(){
    lectorFichCSV = new LectorFichCSV(); //object to read CSV files       
    ftpFileObserver = new FileObserver(filePath.getAbsolutePath()){
        public void onEvent(int event, String file) {
            if((FileObserver.CREATE & event) != 0){
                Log.i("INFO: ", filePath.getAbsolutePath() + "/" + file + " is created");
                if(file.substring(0,3).equals("RVE")){ //If file is created and the one I expect
                    try{
                        Log.i("INFO: ", "We have a RVE answer");
                        is = new FileInputStream(filePath + "/" + file);
                        lineaVent = lectorFichCSV.parseCSVFileAsList(is); //Get information in a list
                        //Get dao from ORMLite
                        dao = getHelper().getLineaVentDao();
                        Iterator<String[]> iterator = lineaVent.iterator();
                        if(iterator.hasNext()){
                            String[] aux = iterator.next();
                            Log.i("INFO:", "CodLineaVent "+aux[0]);
                            if(aux[2].equals("S")){
                                //Update DB information accordin to my file
                                UpdateBuilder<LineaVent, Integer> updateBuilder = dao.updateBuilder();
                                updateBuilder.where().eq("_id", aux[0]);
                                updateBuilder.updateColumnValue("valido", true);
                                updateBuilder.updateColumnValue("saldo", true);
                                updateBuilder.update();
                                lineaVent.clear();
                            }else if(aux[2].equals("N")){
                                UpdateBuilder<LineaVent, Integer> updateBuilder = dao.updateBuilder();
                                updateBuilder.where().eq("_id", aux[0]);
                                updateBuilder.updateColumnValue("saldo", false);
                                updateBuilder.update();
                                lineaVent.clear();
                            }
                            File fileToDel = new File(filePath + "/" + file);
                            fileToDel.delete();
                        }
                    }catch(FileNotFoundException e){
                        e.printStackTrace();
                    }catch(SQLException e){
                        e.printStackTrace();
                    }
                }

コードをデバッグしたところ、動作している場合もあれば、lineaVent.size() == 0 になる場合もあります。これに夢中になり、ファイルの作成よりも早くイベントが発生する可能性はありますか? これが、CSV ファイルを解析して List オブジェクトに変換しようとしたときに、サイズ = 0 になった理由でしょうか? その場合、FileNotFoundException は発生しません。どんな助けでも感謝します。ありがとうございました。

4

1 に答える 1