这是我在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;
}
}
关于我做错了什么的任何建议?
答案 0 :(得分:0)
您无法修改资产文件夹中的文件。只是认为他们只读文件。
如果要创建文本文件并对其进行修改,请使用getExternalCacheDir和new 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();
}