【问题标题】:I can't create a folder in project internal directory [duplicate]我无法在项目内部目录中创建文件夹 [重复]
【发布时间】:2020-01-03 09:50:50
【问题描述】:

我想在 "Ocenki" 文件夹中创建一个 txt 文件

我写了一段代码,应该写入stringbuffer文件:

try {
    FileOutputStream write =  new FileOutputStream(
        new File(
            context.getFilesDir() 
            + File.separator + "Ocenki" 
            + File.separator + url + ".txt")
    );

    String temp_write = stringBuffer.toString();

    write.write(temp_write.getBytes());
    write.close();
} catch (FileNotFoundException p) {
    p.printStackTrace();
} catch (IOException a) {
    a.printStackTrace();
}

方法context.getFilesDir()返回:"/data/user/0/com.example.kos/files"

变量url 包含:"2019 - 2020"

代码出现错误:

FileNotFoundException  
"java.io.FileNotFoundException: /data/user/0/com.example.kos/files/2019 - 2020.txt  
(No such file or directory)"

我做错了什么?

更新:

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.kos"
    android:versionCode="2"
    android:versionName="1.1.1">
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    ...

</manifest>

这是一个权限请求:

 if(ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions((Activity) context,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},3);
            if(ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
               ActivityCompat.requestPermissions((Activity) context,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},3);

【问题讨论】:

  • 您是否添加了读写存储权限?
  • "FileNotFoundException "java.io.FileNotFoundException: /data/user/0/com.example.kos/files/url (No such file or directory)", 这是否完全从跟踪中复制而来。我认为堆栈跟踪应该有“/data/user/0/com.example.kos/files/Ocenki/2019 - 2020.txt”
  • 如果context.getFilesDir()返回"/data/user/0/com.example.kos/files"url是一个变量,它的值为"2019 - 2020",那为什么你的代码会尝试访问(子)目录"/data/user/0/com.example.kos/files/url"?它存在吗?你不想要"/data/user/0/com.example.kos/files/2019 - 2020" 吗?
  • 你的txt文件名是什么?
  • Rohit5k2,谢谢,它解决了我的问题

标签: java android file android-studio filenotfoundexception


【解决方案1】:

给你,

try{

  System.out.println("File Path = " + MainApplication.getFileDirectory() + "/Ocenki" + "/" + fileName);
  File fileCreated = new File(MainApplication.getFileDirectory() + "/Ocenki" + "/" + fileName);
  if (fileCreated.exists()) {
    fileCreated.delete();
  }
  outputStream = new FileOutputStream(MainApplication.getFileDirectory() + "/Ocenki" + "/" + fileName);
  byte[] buffer = new byte[1024];
  int read;

  while ((read = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, read);
  }

  //inputStream.close();
  outputStream.flush();
  outputStream.close();
  }catch (IOException io){
  io.printStackTrace();
}



public static File getFileDirectory() {
 return filesDir;
}

当我在应用程序类中使用这个类时,你可以根据它的上下文在任何类上使用这个方法

 filesDir = MainApplication.this.getFilesDir();

【讨论】:

  • 将文件名传递给此方法
猜你喜欢
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多