由于某些原因,我在阅读时都得到fileNotFoundException
。值得注意的是Toast打印“File exists!”。我使用底部的BufferedReader
来测试文件的内容是否正确。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_calendar, container, false);
recipes = new ArrayMap<>();
filename = "calendar_recipes.txt";
bText= (EditText) v.findViewById(R.id.bEditText);
lText= (EditText) v.findViewById(R.id.lEditText);
dText= (EditText) v.findViewById(R.id.dEditText);
cal = (CalendarView) v.findViewById(R.id.calendarView);
date = cal.getDate();
File file = getActivity().getFileStreamPath(filename);
if(file.exists())
{
Toast.makeText(getActivity(), "File exists!", Toast.LENGTH_SHORT).show();
try
{
FileInputStream fileInputStream = new FileInputStream(getActivity().getFilesDir()+filename);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Map recipes = (Map)objectInputStream.readObject();
}
catch(ClassNotFoundException | IOException | ClassCastException e) {
e.printStackTrace();
}
}
else
{
Toast.makeText(getActivity(), "File does not exist!!", Toast.LENGTH_SHORT).show();
file = new File(getActivity().getFilesDir(), filename);
}
try {
BufferedReader in = new BufferedReader(new FileReader(filename));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
... logcat中
03-24 23:54:57.626 14059-14067/com.stringcheese.recipez.recip_ez W/art: Suspending all threads took: 7.202ms
03-24 23:54:58.409 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: java.io.FileNotFoundException: /data/data/com.stringcheese.recipez.recip_ez/filescalendar_recipes.txt: open failed: ENOENT (No such file or directory)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at libcore.io.IoBridge.open(IoBridge.java:456)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at java.io.FileInputStream.<init>(FileInputStream.java:76)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at java.io.FileInputStream.<init>(FileInputStream.java:103)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at com.stringcheese.recipez.recip_ez.CalendarFragment.onCreateView(CalendarFragment.java:80)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1259)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.app.Activity.performStart(Activity.java:6026)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:155)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.os.Looper.loop(Looper.java:135)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5343)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:702)
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at libcore.io.Posix.open(Native Method)
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: at libcore.io.IoBridge.open(IoBridge.java:442)
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: ... 23 more
答案 0 :(得分:8)
getFilesDir
返回一个File对象。如果你在它上面调用onString(它是隐式的),它会返回它的路径。如果文件是目录,则路径不以斜杠结尾,因此getActivity().getFilesDir()+filename
将导致类似"/data/data/com.yourapp/filescalendar_recipes.txt"
的内容。
您可以使用getActivity().getFilesDir()+File.separator+filename
,也可以只拨打new FileInputStream(file)
。
答案 1 :(得分:2)
我遇到了同样的错误。 This答案对我有用。
您只需在清单中添加一行,如下所示:
> d1
Order Type Unique
1 1 Bowerbird a a
2 2 Catbird b
3 3 Robin c
4 4 Scrubwren 1
5 5 Bowerbird b 2
6 6 Kookaburra A
7 7 Catbird b
8 8 Rosella B
-------------------
答案 2 :(得分:0)
您已使用File
创建了File file = getActivity().getFileStreamPath(filename);
实例,该实例是您使用file.exists()
方法检查的实例。然后你试图用FileInputStream
读另一件事。你应该试试FileInputStream fileInputStream = new FileInputStream(file);
。这样您就可以使用已经检查过的文件创建流。
答案 3 :(得分:0)
较新版本的android有时不支持创建文件夹(对我来说很奇怪,但是我经历过),然后:-
1-确保已创建文件夹和/或
2-将此添加到mainfests
<application android:requestLegacyExternalStorage="true" tools:targetApi="q">
答案 4 :(得分:0)
null