java.io.FileNotFoundException在内部存储android中保存/加载

时间:2016-02-22 16:00:54

标签: java android save load internal-storage

我试图将数据从应用程序保存到内部存储并将其加载回来,但我觉得我错过了一些内容并且在加载中找不到该文件。

保存代码:

    <telerik:RadGridView Name="ProcedureGrid"
                         DockPanel.Dock="Left"
                         SelectionMode="Single"
                         SelectionUnit="FullRow"
                         ItemsSource="{Binding Procedures}"
                         IsReadOnly="True"
                         AutoGenerateColumns="False"
                         ShowGroupPanel="False"
                         ShowColumnHeaders="False"  
                         CanUserReorderColumns ="False"
                         RowIndicatorVisibility="Collapsed"
                         Visibility="Collapsed"
                         Width="200"
                         FontSize="18"
                         SelectionChanged="ProcedureGrid_SelectionChanged"
                         >
        <telerik:RadGridView.Columns>
            <telerik:GridViewDataColumn Header="Name"
                                        AllowDrop="False"
                                        DataMemberBinding="{Binding Converter={StaticResource langConverter}}"
                                        IsGroupable="False" 
                                        IsFilterable="False"
                                        MaxWidth="155"/>
            <telerik:GridViewColumn>
                <telerik:GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <nav:SmallForwardNavigateIcon MaxWidth="30" DockPanel.Dock="Right" Margin="1"
                                                      Cursor="Hand" VerticalAlignment="Center" HorizontalAlignment="Center" 
                                                      MouseDown="SmallForwardNavigateIcon_MouseDown" 
                                                      Visibility="{Binding RelativeSource={RelativeSource FindAncestor, 
                                                                                            AncestorType={x:Type UserControl}}, 
                                                                                            Path=DataContext.previousProc, 
                                                                                            Converter={StaticResource IsPrevProc}}" />
                    </DataTemplate>
                </telerik:GridViewColumn.CellTemplate>
            </telerik:GridViewColumn>
        </telerik:RadGridView.Columns>
    </telerik:RadGridView>

加载代码:

private void saveScanData(List<MyStack> surf) throws IOException {
    Log.i(TAG, "Saving");
    String filename = String.format("Scan%05d.data", scanNumber);
    scanNumber += 1;
    ObjectOutput out;

    File outFile = new File(Environment.getExternalStorageDirectory(), filename);
    out = new ObjectOutputStream(new FileOutputStream(outFile));

    out.writeObject(surf);
    out.close();
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您使用名称

写入文件
String.format("Scan%05d.data", scanNumber)

但是你读了名为

的文件
"Scan%05d.data"

更改对象输入流创建或使用其他方法创建文件名。

new ObjectInputStream(new FileInputStream(String.format("Scan%05d.data", scanNumber));

答案 1 :(得分:1)

使用open openFileOutput和openfileInput方法,而不是打开新的输入和输出流。

http://developer.android.com/intl/es/guide/topics/data/data-storage.html#filesInternal

此外,您正在尝试将文件保存在ExternalStorage文件夹中。 Environment.getExternalStorageDirectory()。在该文件夹中写入需要AndroidManifest上的Android权限

答案 2 :(得分:0)

您正在写入外部存储空间:

new File(Environment.getExternalStorageDirectory(), filename);

你无处可读:

new ObjectInputStream(new FileInputStream("Scan%05d.data"));

如果您想使用外部存储空间,请在两个地方使用外部存储 ,而不只是一个。