无法编写和附加文本文件android

时间:2016-02-16 04:04:16

标签: android text

我正在尝试编写一个用于登录我的应用程序的文本文件。在执行时,有READ-ONLY EXCEPTION,因此无法写入文本文件。

只能执行文件1“

现在使用5.0.1

以下是我的代码:

public static void writefile(String text  )
{
    File externalStorageDir =  new File (Environment.getExternalStorageDirectory().getAbsolutePath() +  File.separator  + "Download" );
    String fileName=  date() + ".txt" ;
    File dir = new File(externalStorageDir  ,  File.separator + "eyedebug"  );
    boolean statement = dir.exists() && dir.isDirectory();
    if(!statement) {
        // do something here
        dir.mkdirs(); 
        System.out.println("file 1");
    } 


    File myFile = new File(dir.getAbsolutePath() ,  File.separator + fileName  );
    if(!myFile.exists()){
        try {
            myFile.createNewFile();
            System.out.println("file 2");
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    } 

    try
    {
        FileWriter fileWritter = new FileWriter(myFile.getName(),true);
        BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
        bufferWritter.append(text);
        bufferWritter.newLine();
        System.out.println("file 3");
        bufferWritter.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }



}

4 个答案:

答案 0 :(得分:4)

经过长时间的工作,我终于找到了你的解决方案,只需实现下面的代码就可以帮到你..

 public static void writefile(String text  )
  {
    File externalStorageDir =  new File (Environment.getExternalStorageDirectory().getAbsolutePath()  + "/Download/eyedebug/" );
    String fileName=  System.currentTimeMillis() + ".txt" ;

    boolean statement = externalStorageDir.exists() && externalStorageDir.isDirectory();
    if(!statement) {
        // do something here
        externalStorageDir.mkdirs();
        System.out.println("file 1");
    }


    File myFile = new File(externalStorageDir.getAbsolutePath() ,   fileName  );
    if(!myFile.exists()){
        try {
            myFile.createNewFile();
            System.out.println("file 2");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    try
    {
        FileWriter fileWritter = new FileWriter(myFile,true);
        BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
        bufferWritter.append(text);
        bufferWritter.newLine();
        System.out.println("file 3");
        bufferWritter.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }



}

答案 1 :(得分:0)

在清单文件中添加写入权限WRITE_EXTERNAL_STORAGE

答案 2 :(得分:0)

在清单文件中添加以下行

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

答案 3 :(得分:0)

有两种方法可以将应用程序日志打印到文件中。

如果您想获取所有loged事件,那么您可以使用以下方法使用命令行将日志保存到文件中。

 public static void printLog(Context context){
    String filename = context.getExternalFilesDir(null).getPath() + File.separator + "my_app.log";
    String command = "logcat -f "+ filename + " -v time -d *:V";

    Log.d("FB Error Log", "command: " + command);

    try{
        Runtime.getRuntime().exec(command);
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

否则您可以使用以下方法将单个日志保存到文件中。

 public static void appendLog(String text) {
    File logFile = new File("sdcard/app_log.txt");
    try {
        if (!logFile.exists()) {
            logFile.createNewFile();
        }

        //BufferedWriter for performance, true to set append to file flag
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        String format = "[dd/MM/yy HH:mm:ss]";
        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
        String currentTime = sdf.format(date);
        BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
        buf.append(currentTime+" - "+text);
        buf.newLine();
        buf.close();
    }
    catch (Exception e) {
        Log.e("StaticUtils", e.getMessage(), e);
    }
}

别忘了添加权限

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