У меня есть куча файлов ресурсов, которые я читаю в Android, когда приложение запускается, а затем записывает их в каталог данных. Я закрываю буферизованный ридер в Java, но когда я пытаюсь прочитать файл, который я только что написал в JNI, он говорит, что файл уже открыт. Есть ли дополнительный шаг для освобождения файлового ресурса, который мне не хватает? Мой код ниже: суффикс несколько нестандартный, но запись, кажется, работает нормально. Следующее, что я делаю, это пытаюсь прочитать файл в части программы JNI, но std :: ifstream f (filepath) не открывает файл
std :: ifstream myfilestream (fileName);
if (! (Myfilestream.is_open ())) {
}
public void StoreResourceFilesFiles() throws IOException {
String str="";
StringBuffer buf = new StringBuffer();
Resources res=this.getResources();
InputStream is = this.getResources()
.openRawResource(R.raw.snlfiles);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
if (is!=null) {
while ((str = reader.readLine()) != null) {
buf.append(str + "\n" );
}
}
is.close();
// Toast.makeText(getBaseContext(),
// buf.toString(), Toast.LENGTH_LONG).show();
BufferedWriter writer = null;
try
{
File f = this.getFilesDir();
String absPath=f.getAbsolutePath();
String[] files=f.list();
int len1 = files.length;
FileOutputStream fos = openFileOutput("myfile.snl", Context.MODE_PRIVATE);
fos.write(buf.toString().getBytes());
fos.close();
if ( writer != null)
writer.close( );
// writer.write( buf.toString());
File f2 = this.getFilesDir();
int len2 = f2.list().length;
files = f2.list();
Log.i("NDKFooActivity", "length1="+len1 +"length2="+len2);
for (int i=0; i< files.length; i++){
Toast.makeText(this, "filesName="+files[i], Toast.LENGTH_SHORT).show();
}
}
catch ( IOException e)
{
Log.i("NDKFooActivity", "error is "+e.getMessage());
}
finally
{
try
{
if ( writer != null)
writer.close( );
}
catch ( IOException e)
{
}
}
}