2017-01-28 6 views
1

私のプログラムで2回ファイルにアクセスしようとしています。File.exists falseを返す

まず、私は正常に動作するファイルから読んでいます。

2回目に、私が読み込んだ同じファイルを削除しようとしています。

奇妙なことに、2回目にファイルにレコードが存在しません。実際に私がコマンドfile.existsを実行しようとすると、falseを返します。 なぜこれが起こっていますか?続き

は私のコードです:

public class ControlLights extends AppCompatActivity { 

    private RoomListAdapter adapter; 
    private List<ROOM> mRoomList; 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.popup,menu); 
    } 

    public void filedel(int pos) { 
     Toast.makeText(getApplicationContext(), String.valueOf(pos), Toast.LENGTH_LONG).show(); 
     File filemain = new File("roomdata.txt"); 
     try { 
      File temp = File.createTempFile("file",".txt",filemain.getParentFile()); 
      String charset = "UTF-8"; 
      BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(temp), charset)); 
      PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(temp), charset)); 
      int p=0; 
      for(String line; (line=reader.readLine())!=null;) { 
       if(p == pos) { 
        line = line.replace(line,""); 
        writer.println(line); 
       } 
       writer.println(line); 
      } 
      reader.close(); 
      writer.close(); 
      filemain.delete(); 
      temp.renameTo(filemain); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }  
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
     switch (item.getItemId()) { 
      case R.id.Edit: 
       return true; 

      case R.id.Delete: 
       filedel(info.position); 
       mRoomList.remove(info.position); 
       adapter.notifyDataSetChanged(); 
       return true; 

      default: 
       return super.onContextItemSelected(item); 
     } 
    } 

    public void loadrooms() { 

     int block = 1024; 

     try { 
      boolean exists = (new File("roomdata.txt").exists()); 
      Toast.makeText(getApplicationContext(), String.valueOf(exists), Toast.LENGTH_LONG).show(); 

      FileInputStream fis = openFileInput("roomdata.txt"); 
      InputStreamReader isr = new InputStreamReader(fis); 
      char[] data = new char[block]; 
      String roomdata = ""; 
      int size; 
      try { 
       while ((size = isr.read(data)) > 0) { 
        String read_data = String.copyValueOf(data, 0, size); 
        roomdata += read_data; 
        data = new char[block]; 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      String[] room_display = roomdata.split("\n"); 
      String[] tempstring; 
      ListView lsv = (ListView) findViewById(R.id.Room_list); 
      mRoomList = new ArrayList<>(); 
      for (int b = 0; b < room_display.length; b++) { 
       tempstring = room_display[b].split(":"); 
       mRoomList.add(new ROOM(tempstring[0], tempstring[1], tempstring[2], tempstring[3], tempstring[4], tempstring[5], tempstring[6], tempstring[7], tempstring[8], tempstring[9])); 
      } 

      adapter = new RoomListAdapter(getApplicationContext(), mRoomList); 
      lsv.setAdapter(adapter); 
      registerForContextMenu(lsv); 


      int count = mRoomList.size(); 
      final ArrayList<Integer> disabledpos = new ArrayList<Integer>(); 

      for (int q = 0; q < count; q++) { 
       ROOM temp_room1 = mRoomList.get(q); 
       String IP = temp_room1.getRoom_IP_Address(); 
       String online = null; 
       ConnectionTest CT = new ConnectionTest(); 
       try { 
        online = CT.execute(IP, "a", "b").get(); 
        Boolean b1 = Boolean.valueOf(online); 

        if (!b1) { 
         disabledpos.add(q); 
        } 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } catch (ExecutionException e) { 
        e.printStackTrace(); 
       } 

      } 
      try { 
       isr.reset(); 
       isr.close(); 
       fis.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      if (new File("roomdata.txt").delete()) { 
       Toast.makeText(getApplicationContext(), "deleted", Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(getApplicationContext(), "not deleted", Toast.LENGTH_LONG).show(); 
       // Not deleted 
      } 

      lsv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        int temp_position = position; 
        Intent p = new Intent(ControlLights.this, Electrical_equipment_list.class); 
        if (!(disabledpos.contains(position))) { 
         ROOM temp_room = mRoomList.get(temp_position); 
         p.putExtra("EE1", temp_room.getEE1()); 
         p.putExtra("EE2", temp_room.getEE2()); 
         p.putExtra("EE3", temp_room.getEE3()); 
         p.putExtra("EE4", temp_room.getEE4()); 
         p.putExtra("EE5", temp_room.getEE5()); 
         p.putExtra("EE6", temp_room.getEE6()); 
         p.putExtra("EE7", temp_room.getEE7()); 
         p.putExtra("EE8", temp_room.getEE8()); 
         p.putExtra("IPaddress", temp_room.getRoom_IP_Address()); 
         startActivity(p); 
        } 
       } 
      }); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_control_lights); 
     loadrooms(); 
    } 

    public class ConnectionTest extends AsyncTask<String, String, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      Boolean online; 
      String tempstring = null; 
      try { 
       InetAddress roomaddress = InetAddress.getByName(params[0]); 
       online = roomaddress.isReachable(100); 
       tempstring = String.valueOf(online); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return tempstring; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
     } 
    } 
} 

答えて

0
  1. それはクラスが

  2. あなたの内のロジックを移動しないものの必須成分であることから、クラスのメンバーとして、あなたのFileを保ち、ファイル参照の初期化へonStart()

    public class ControlLights extends AppCompatActivity { プライベートRoomListアダプターアダプター。 プライベートリストmRoomList; プライベートファイルfilemain; ...

    public void filedel(int pos) { 
        Toast.makeText(getApplicationContext(), String.valueOf(pos), Toast.LENGTH_LONG).show(); 
        try { 
         File temp = File.createTempFile("file",".txt", filemain.getParentFile()); 
         ... 
        } 
    } 
    
    public void loadrooms() { 
        int block = 1024; 
        try { 
         boolean exists = filemain.exists(); 
         ... 
         if (filemain.delete()) { 
          Toast.makeText(getApplicationContext(), "deleted", Toast.LENGTH_LONG).show(); 
         } else { 
          Toast.makeText(getApplicationContext(), "not deleted", Toast.LENGTH_LONG).show(); 
          // Not deleted 
         } 
        } ... 
    } 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_control_lights); 
    } 
    
    @Override 
    protected void onStart() { 
        super.onStart(); 
        filemain = new File("roomdata.txt"); 
        loadrooms(); 
    } 
    

    }

フットノート

私はひどいコードフォーマットをお詫び申し上げますが、どうやら彼らはあなたが手動でする必要がポイントに構文解析アルゴリズムを変更コピーして貼り付けるのではなく、ここにすべてのコードをもう一度入力してください。それに応じて誰でも編集できます。

+0

ありがとうございました。私は最終的にdeletefileコマンドを使用してファイルを削除することができました。ファイルのストリームを使って作成したファイルは、file.deleteコマンドでは削除できません。私が間違っていれば私を訂正してください。あなたから聞いて楽しみにして。 –

関連する問題