打开失败:ENOENT(没有这样的文件或目录)内部存储

open failed: ENOENT (No such file or directory) internal storage

我在 Android 应用程序中发现错误有点困难。

我的"ResultActivity"的目标是,在内部存储中创建一个文件,然后从我的服务器(通过FTP)下载一个文件,然后调用下一个Activity (礼物Activity).

但是当下一个 Activity 试图访问这些文件时,我得到了提到的错误。到目前为止没有什么新鲜事,但有趣的是,如果我手动终止应用程序并重新启动它,下次它就会像魅力一样工作。

这是我的代码:

ResultActivity.java:

//...
ImageButton download = (ImageButton) findViewById(R.id.downloadCode);
download.setBackgroundDrawable(null);
assert download != null;
download.setOnClickListener(new View.OnClickListener() {@
  Override
  public void onClick(View v) {
    new AsyncTask < Integer, Void, Void > () {@
      Override
      protected Void doInBackground(Integer...params) {
        try {
          JSch jsch2 = new JSch();

          session = jsch2.getSession("xy", "1.2.3.4", 22);
          session.setPassword("xyz123");
          //Set FTP Settings
          java.util.Properties config = new java.util.Properties();
          config.put("StrictHostKeyChecking", "no");
          //Disables Fingerprint checking!
          session.setConfig(config);
          //load config to session

          session.connect();

          //connect to the session
          channel = session.openChannel("sftp");
          channel.connect();
          //open an SFTP Channel
          channelSftp = (ChannelSftp) channel;

          File checkExistance = getBaseContext().getFileStreamPath("code.txt");
          if (checkExistance.exists()) {
            getBaseContext().deleteFile("code.txt");
            getBaseContext().deleteFile("usage.txt");
          }

          File code = new File(getFilesDir().getAbsolutePath(), "code.txt");
          File usage = new File(getFilesDir().getAbsolutePath(), "usage.txt");

          code.createNewFile();
          usage.createNewFile();

          channelSftp.get("/home/code.txt", getFilesDir() + "/code.txt");
          channelSftp.get("/home/usage.txt", getFilesDir() + "/usage.txt");
        } catch (JSchException e) {
          e.printStackTrace();
        } catch (SftpException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
        return null;
      }
    }.execute(1);
    Intent intent = new Intent(ResultActivity.this, GiftActivity.class);
    ResultActivity.this.startActivity(intent);
    ResultActivity.this.finish();
  }
});

GiftActivity.java:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gift);

        TextView actualCode = (TextView) findViewById(R.id.actualCode);
        TextView actualUsage = (TextView) findViewById(R.id.usageCode);
        String code = "";
        String usage = "";

        try {

            FileInputStream fis = getBaseContext().openFileInput("code.txt");
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                sb.append(line).append("\n");
            }
            code = sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
            code="error1";
        }

        try {
            FileInputStream fis = getBaseContext().openFileInput("usage.txt");
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                sb.append(line).append("\n");
            }
            usage = sb.toString();
        } catch (IOException e) {
        e.printStackTrace();
        usage="error2";
        }
        actualCode.setText(code);
        actualUsage.setText("you got a gift for " + usage + " congratulation!");
    }

我通过替换修复了它:

File code = new File(getFilesDir().getAbsolutePath(), "code.txt");
File usage = new File(getFilesDir().getAbsolutePath(), "usage.txt");

code.createNewFile();
usage.createNewFile();

与:

File code = new File(getBaseContext().getFilesDir(), "code.txt");
File usage = new File(getBaseContext().getFilesDir(), "usage.txt");