繁体   English   中英

文件写入未在android中执行

[英]file writing is not performing in android

我需要在注册过程中将注册凭据写入文件,并且在登录期间将检查该文件中的凭据。 但在注册按钮上单击,则没有执行任何操作。

清单文件包含此权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

registration.java部分:

reg.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String user=username.getText().toString();
            String pwd=password.getText().toString();
            String cpwd=confirm.getText().toString();

            if(user.equals("")||pwd.equals("")||cpwd.equals("")){
                Toast.makeText(getApplicationContext(), "Fields cannot be Blank", Toast.LENGTH_SHORT).show();
            }
            else if(pwd.equals(cpwd)){
                String data=user+","+pwd+":";                   

                try {
                    FileOutputStream fout = new FileOutputStream(Environment.getExternalStorageDirectory()+"/myapp/userregister.txt/", true);
                    fout.write(data.getBytes());
                    Toast.makeText(getApplicationContext(), "Succesfully Register", Toast.LENGTH_SHORT).show();
                    Intent a=new Intent(getApplicationContext(),LoginActivity.class);
                    startActivity(a);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
                else if(!pwd.equals(cpwd)){
                    Toast.makeText(getApplicationContext(), "Password not match.. Try again!", Toast.LENGTH_SHORT).show();
                }


        }
    });

在LoginActivity.java中

if(username.equals("") || password.equals("")){

        Toast.makeText(getApplicationContext(), "Fields Cannot be Blank", Toast.LENGTH_SHORT).show();
    }else{
         String reply=FileManipulator.authenticateUser(username, password);
                 if(reply.equals("user")){
                     Intent gotoNextActivity=new Intent(getApplicationContext(),HomeActivity.class);
                        startActivity(gotoNextActivity);

                 }else{
        Toast.makeText(getApplicationContext(), "Invalid User.... Try again",Toast.LENGTH_SHORT).show();
           }
    }

FileManipulator类authenticateUser函数:

public static String authenticateUser(String user, String pass){
    String data="";
    String data1 = "";
    try{
        FileInputStream fin=new FileInputStream(Path.userregister);
        byte[] b=new byte[fin.available()];
        fin.read(b);
        data=new String(b);
        String st=user+","+pass+":";
        if(data.contains(st)){
            data1="user";
        }
    }catch(Exception e){
        e.printStackTrace();
    }

    return data1;

}

日志猫显示

09-02 05:48:06.292: D/dalvikvm(1964): GC_CONCURRENT freed 240K, 12% free 2838K/3200K, paused 5ms+32ms, total 177ms
09-02 05:48:06.802: I/Choreographer(1964): Skipped 36 frames!  The application may be doing too much work on its main thread.
09-02 05:48:10.362: I/Choreographer(1964): Skipped 32 frames!  The application may be doing too much work on its main thread.
09-02 05:48:20.872: W/System.err(1964): java.io.FileNotFoundException: /mnt/sdcard/myapp/userregister.txt: open failed: EACCES (Permission denied)
09-02 05:48:20.872: W/System.err(1964):     at libcore.io.IoBridge.open(IoBridge.java:416)
09-02 05:48:20.882: W/System.err(1964):     at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
09-02 05:48:20.882: W/System.err(1964):     at java.io.FileOutputStream.<init>(FileOutputStream.java:128)
 09-02 05:48:20.882: W/System.err(1964):    at com.example.text.RegActivity$1.onClick(RegActivity.java:49)
 09-02 05:48:20.892: W/System.err(1964):    at android.view.View.performClick(View.java:4204)
 09-02 05:48:20.892: W/System.err(1964):    at android.view.View$PerformClick.run(View.java:17355)
 09-02 05:48:20.902: W/System.err(1964):    at android.os.Handler.handleCallback(Handler.java:725)
 09-02 05:48:20.912: W/System.err(1964):    at android.os.Handler.dispatchMessage(Handler.java:92)
 09-02 05:48:20.912: W/System.err(1964):    at android.os.Looper.loop(Looper.java:137)
 09-02 05:48:20.912: W/System.err(1964):    at android.app.ActivityThread.main(ActivityThread.java:5041)
 09-02 05:48:20.922: W/System.err(1964):    at java.lang.reflect.Method.invokeNative(Native Method)
 09-02 05:48:20.922: W/System.err(1964):    at java.lang.reflect.Method.invoke(Method.java:511)
 09-02 05:48:20.922: W/System.err(1964):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
 09-02 05:48:20.922: W/System.err(1964):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 09-02 05:48:20.922: W/System.err(1964):    at dalvik.system.NativeStart.main(Native Method)
 09-02 05:48:20.932: W/System.err(1964): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
 09-02 05:48:20.942: W/System.err(1964):    at libcore.io.Posix.open(Native Method)
 09-02 05:48:20.942: W/System.err(1964):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
 09-02 05:48:20.952: W/System.err(1964):    at libcore.io.IoBridge.open(IoBridge.java:400)
 09-02 05:48:20.952: W/System.err(1964):    ... 14 more

我是android和java的新手。请帮助我查找错误。

1)在AndroidManifest.xml文件中添加android.permission.WRITE_EXTERNAL_STORAGE

2)进行以下操作之前,请务必检查外部存储设备的可用性:

 String state = Environment.getExternalStorageState();
 if (Environment.MEDIA_MOUNTED.equals(state)) {
        // Can read and write the media

    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        // Can only read the media

    } else {
        // Can't read or write
    }   

3)创建一个目录,然后在其中创建文件。

 File dir = new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/myapp");
        dir.mkdirs();
        File file = new File(dir, "userregister.txt");

注意 :如果您使用的是Android 4.4 KitKat,则不允许将应用写入辅助外部存储设备,除非在其特定于软件包的目录中

原因来自http://source.android.com/devices/tech/storage/index.html

WRITE_EXTERNAL_STORAGE权限只能授予对设备上主要外部存储的写访问权限。 除合成权限允许的应用程序特定于程序包的目录外,不得允许应用程序写入辅助外部存储设备。 以这种方式限制写操作可确保系统在卸载应用程序时可以清理文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM