이 클래스를 이해할 수 없습니다. 내 내부 저장소의 새 디렉토리에 새 파일을 만들고 텍스트를 입력 한 다음 읽으려고했습니다. 이것은 ContextWrapper 없이는 작동하지 않는 것 같습니다. 그래서 이것을 시도 :컨텍스트 및 컨텍스트 랩퍼 이해 문제
public class DownloadActivity extends Activity {
...
class Download extends AsyncTask<String, Void, String>{
....
private void searchAndSave(String s) throws IOException {
....
ContextWrapper cw = new ContextWrapper(getBaseContext());
File folder = cw.getDir("folder", Context.MODE_PRIVATE);
File fileInFolder = new File(folder, "fileInFolder");
String string = "Hello world!";
FileOutputStream outputStream = openFileOutput("fileInFolder",
Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
File fl = new File(cw.getDir("folder", Context.MODE_PRIVATE)+"/fileInFolder");
FileInputStream fin = new FileInputStream(fl);
BufferedReader reader = new BufferedReader(
new InputStreamReader(fin));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
String result = sb.toString();
reader.close();
fin.close();
}
}
파일을 만드는 것은 ContextWrapper 없이는 작동하지 않습니다. 나는 많은 것을 읽었지 만, Context와 Contextwrapper가 실제로 무엇을하는지, 왜 내가 파일을 생성해야 하는지를 이해하는 데 문제가 있습니다. 또한 내 코드에서 FileInputStream 만들기 작동하지 않습니다. 난 정말 이해와이 문제를 해결하는 몇 가지 도움을 주셔서 감사합니다 것
05-21 11:18:25.721: W/System.err(7344): java.io.FileNotFoundException:
/data/data/com.example.dice/app_folder/fileInFolder: open failed:
ENOENT (No such file or directory)
: 프로그램이
FileInputStream fin = new FileInputStream(fl);
에 도달하면 난 항상 오류가 발생합니다.
업데이트 : 더 많은 액티비티를 만들었습니다. 이제는 모든 것을 재구성하는 것이 더 쉽습니다. (새로운 답변으로이 작업을 수행해야합니까, 아니면 첫 번째 게시를 편집해도 괜찮습니까?) 파일을 만들 때 오류 메시지가 나타나지 않지만 작동하지 않는 것 같습니다. 여기 "Hello world"문자열을 읽으려고 시도하지만 FileNotFoundException (EISDIR)이 발생합니다. 그냥 알기를 바랍니다 :)
public class FolderActivity extends Activity {
public final static String TAG = "FolderActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_folder);
Button button = (Button) findViewById(R.id.button_folder);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
folder();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private void folder() throws IOException{
Log.d(TAG, "folder");
ContextWrapper cw = new ContextWrapper(getBaseContext());
Log.d(TAG, "cw = new ContextWrapper");
File folder = cw.getDir("folder", Context.MODE_PRIVATE);
Log.d(TAG, "folder = cw.getDir");
File fileInFolder = new File(folder, "fileInFolder");
Log.d(TAG, "fileInFolder = new File");
/*Log.d(TAG,
"fileInFolder.getAbsolutePath()"
+ fileInFolder.getAbsolutePath());*/
String string = "Hello world!";
// Aksioms suggestion
if (!fileInFolder.exists() && !fileInFolder.mkdirs()) {
Log.e("file", "Couldn't create file " + fileInFolder);
} else { Log.d(TAG, "file created"); }
FileOutputStream outputStream = openFileOutput("fileInFolder",
Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
Log.d(TAG,
"fileInFolder.getAbsolutePath()"
+ fileInFolder.getAbsolutePath());
String s = fileInFolder.getAbsolutePath();
try {
getStringFromFile(s);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getStringFromFile (String filePath) throws Exception {
File fl = new File(filePath);
FileInputStream fin = new FileInputStream(fl);
String ret = convertStreamToString(fin);
//Make sure you close all streams.
fin.close();
return ret;
}
public static String convertStreamToString(InputStream is) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
reader.close();
return sb.toString();
}
}
래퍼가없는 문제는 무엇입니까? – laalto
정확히 무엇을하는지 이해하지 못합니다. 내 주요 문제는 내가 파일을 읽는 프로그램을 얻지 못한다는 것이다. 나는 내가 뭘 잘못하고 있는지 알고 싶다. – Schnicke