Android没有创建/附加a.txt文件

时间:2015-04-27 06:05:49

标签: android file

这是我在Android活动中从.txt文件中读取的内容。虽然应用程序运行,但我发现没有创建/追加文件。在logcat中显示以下行,

java.io.FileNotFoundException: /home/Desktop/RiaC_android/Test/app/src/main/assets/SampleFile.txt: open failed: ENOENT (No such file or directory)

我目前使用的代码,虽然我之前尝试过,     BufferedWriter out = new BufferedWriter(                     新的FileWriter(" test_File.txt")); 但结果仍然相同。

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.widget.TextView;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView tv = (TextView)findViewById(R.id.textView);
File testFile = new File("/home/Desktop/RiaC_android/Test/app/src/main/assets", "SampleFile.txt");
FileWriter writer = null;
try {
writer = new FileWriter(testFile, true);
writer.write("Hello File!!");
writer.close();
} catch (IOException e) {
        e.printStackTrace();
}
if (testFile.exists())
tv.setText("File created!!");
}

public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
     }
}

关于我做错了什么的任何建议?

3 个答案:

答案 0 :(得分:0)

您无法修改资产文件夹中的文件。只是认为他们只读文件。

如果要创建文本文件并对其进行修改,请使用getExternalCacheDirnew File方法创建文件。

public static File CreateTextFile(Context context, String filename) throws IOException {
    final File root = context.getExternalCacheDir();
    return new File(root, filename);
}

以下编辑

<强> 1。要简单地写文字,请按以下步骤操作

String text = "bla bla";
FileWriter writer=null;
    try {
            File file = CreateTextFile("something.txt"); // proposed method
            if(!file.exists())
                file.createNewFile();

            writer = new FileWriter(file);

            /** Saving the contents to the file*/
            writer.write(text);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

<强> 2。要读取缓存文件,
请检查此链接:https://stackoverflow.com/a/5971667/361100

第3。还有一个例子
下面的示例是从互联网上编写提取的文本。

String webUrl = "http://www.yourdata.com/data.txt";

    try {
        URL url = new URL(webUrl);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection.setRequestMethod("GET");
        urlConnection.setDoInput(true);

        urlConnection.connect();
        File file = CreateTextFile("something.txt"); // proposed method

        if(!file.exists())
            file.createNewFile();

        FileOutputStream fileOutput = new FileOutputStream(file);

        InputStream inputStream = urlConnection.getInputStream();

        int totalSize = urlConnection.getContentLength();
        int downloadedSize = 0;

        byte[] buffer = new byte[1024];
        int bufferLength = 0;
        while ( (bufferLength = inputStream.read(buffer)) > 0 ) {

            fileOutput.write(buffer, 0, bufferLength);
            downloadedSize += bufferLength;
            Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
        }

        fileOutput.close();
        if(downloadedSize==totalSize)
            filepath=file.getPath();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        filepath=null;
    }

答案 1 :(得分:0)

无法写入/asset目录,因为它是只读的。

资源文件夹就像文件夹res,src,gen等。这些都可以提供不同的文件作为构建系统的输入,为您的应用程序生成APK文件。

在您的应用运行时,所有这些都是只读的。在运行时,您可以写入SD卡。

您不能在运行时使用assets/访问File。您可以使用assets/在运行时访问AssetManager,您可以通过getResources().getAssets()获取。{/ p>

要从/asset文件夹中读取,请使用以下代码:

AssetManager assetManager = getResources().getAssets();
InputStream inputStream = null;

    try {
        inputStream = assetManager.open("SampleFile.txt");
           if ( inputStream != null)
                Log.d("TAG", "It worked!");
        } catch (Exception e) {
            e.printStackTrace();
        }

答案 2 :(得分:0)

您无法将文件写入资产文件夹。资产文件夹在运行时是只读的。选择其他位置以保存数据。即,Environment.getExternalStorageDirectory()不使用Environment.getExternalStorageDirectory()。getAbsolutePath()。

要从资产中读取文件,请使用以下方法

public String readFromAsset(String fileName, Context context) {
StringBuilder returnString = new StringBuilder();
InputStream fIn = null;
InputStreamReader isr = null;
BufferedReader input = null;
try {
    fIn = context.getResources().getAssets()
            .open(fileName, Context.MODE_WORLD_READABLE);
    isr = new InputStreamReader(fIn);
    input = new BufferedReader(isr);
    String line = "";
    while ((line = input.readLine()) != null) {
        returnString.append(line);
    }
} catch (Exception e) {
    e.getMessage();
} finally {
    try {
        if (isr != null)
            isr.close();
        if (fIn != null)
            fIn.close();
        if (input != null)
            input.close();
    } catch (Exception e2) {
        e2.getMessage();
    }
}
return returnString.toString();
  }