2016-08-13 68 views
0

在我的活动时,当用户登录 我检查是否存在用户列表的文件,万一该方法返回false,我创建一个新文件保存这个列表。java.io.FileNotFoundException:/sdcard/Hotel_Manager/HotelsMangerUser.dat(没有这样的文件或目录)

这是方法:

public boolean isLoginFilePresent() { 
     file = new File(loginData.getPath());//file name /sdcard/Hotel_Manager/HotelsMangerUser.dat; 

     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     present = file.exists(); 
     return present; 
    } 

但我得到以下错误(这是日志):

java.io.FileNotFoundException: /sdcard/Hotel_Manager/HotelsMangerUser.dat (No such file or directory) 
08-13 11:15:36.174 12174-12174/app.com.hotelsmanager W/System.err:  at java.io.FileOutputStream.open(Native Method) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at java.io.FileOutputStream.<init>(FileOutputStream.java:221) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at java.io.FileOutputStream.<init>(FileOutputStream.java:169) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at app.com.hotelsmanager.Controller.LoginDataSaver.saveLoginData(LoginDataSaver.java:108) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at app.com.hotelsmanager.Controller.LoginController.addDemoLoginFile(LoginController.java:130) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at app.com.hotelsmanager.View.Activities.LoginViewActivity.loginMe(LoginViewActivity.java:101) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at app.com.hotelsmanager.View.Activities.LoginViewActivity.-wrap0(LoginViewActivity.java) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at app.com.hotelsmanager.View.Activities.LoginViewActivity$1.onClick(LoginViewActivity.java:71) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at android.view.View.performClick(View.java:5610) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at android.view.View$PerformClick.run(View.java:22260) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at android.os.Handler.handleCallback(Handler.java:751) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at android.os.Looper.loop(Looper.java:154) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6077) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
08-13 11:15:36.175 12174-12174/app.com.hotelsmanager W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

我错了吗?

谢谢你帮助我!

+1

确保您的文件或文件夹路径存在。 – Razgriz

+1

'isLoginFilePresent()'将始终返回true。那么如果文件被创建。但是你总是用'file.createNewFile()'创建一个新的空文件。 – greenapps

+1

但是,随着'FileOutputStream'出现问题,您应该显示该代码。 – greenapps

回答

1

这是保存用户的方法进入文件

public void saveLoginData(Set<User> accountSet, Context context) { 
     final List<String> loginFile = new ArrayList<>(); 

     for (final User u : accountSet) { 
      loginFile.add(u.getName() + Constants.USERDATA_SEPARATOR + u.getPassword() + 
        Constants.USERDATA_SEPARATOR + u.getAccessLevel().toString()); 
     } 
     try { 
      sdDir = new File(Constants.USER_DIR); //USER_DIR = "/sdcard/Hotel_Manger" 
      sdDir.mkdirs(); 
      userOutput = new File(sdDir,Constants.USER_PATH);//USER_PATH = "HotelManagerUser.dat" 
      fos = new FileOutputStream(userOutput); //<------this return FileNotFoundException e 
      out = new ObjectOutputStream(fos); 
      out.writeObject(loginFile); 
      out.close(); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


    } 
相关问题