首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileOutputStream不工作

FileOutputStream不工作
EN

Stack Overflow用户
提问于 2014-04-17 20:26:55
回答 1查看 1.5K关注 0票数 0

我做了一个学习Java的android应用程序。

现在,我喜欢将带有对象的列表中的对象写入文件。

比如..。

代码语言:javascript
复制
private List<MyObjects> objects = new ArrayList<MyObjects>();

MyObjects是一个额外的类,实现了"Serializable“。

为了在文件中写入对象,我还使用了一个额外的类。

现在我的问题来了。

使用下面的代码行,我得到了一个FileNotFoundException。

代码语言:javascript
复制
fos = new FileOutputStream(fileName);

当我使用此行更改此行时...

代码语言:javascript
复制
fos = ctx.openFileOutput(fileName, Context.MODE_PRIVATE);

..。看起来不错,但是在编码代码后,我在data/data/myPakage/files/中找不到这个文件。

该文件不存在。

在过去的4天里,我阅读了很多关于这方面的网站和教程,但我找不到我的错误。

请帮帮我。

我不需要已解决的代码,但是指向右侧的链接或错误代码中的指针就可以了。

对不起,我的英语不好。不是我的第一语言。

我不确定代码部分,你需要得到一个很好的概述。如果你需要更多,请告诉我。

这里是我的主站点的一部分

代码语言:javascript
复制
package com.example.myProject;

import android.os.Bundle;
import android.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class ActivityMain extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout_calc);
        TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
    }
}

这里是我的片段站点的一部分

代码语言:javascript
复制
package com.example.myProject;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class Fragment_1 extends Fragment implements OnClickListener {
    private Button btnOFF;
    private List<Numbers> number = new ArrayList<Numbers>();
    private View fragment_1;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        this.fragment_1 = inflater.inflate(R.layout.fragment_layout, container, false);

        this.btnOFF = (Button)elementary.findViewById(R.id.id_btnOFF_Elementary);
        this.btnOFF.setOnClickListener(this);

        this.number.add(new Numbers());

        // Here i try to get my data back from the file.
        // Every time i get the information; The file not exist
        // Perhaps the "containsAll" are wrong. But this is in the moment not my problem.
        this.number.containsAll(StreamControl.importNumbers(this.getActivity()));

        return fragment_1;
    }

    @Override
    public void onClick(View buttonView) {

        if (buttonView == this.btnOFF) {

            // Here i try to export data over extra class -- see below
            // I put in my List with objects calls "number" and information
            // for "Context" i hope.
            StreamControl.exportNumbers(number, this.getActivity());
        }
    }
}

我的班号的一部分

代码语言:javascript
复制
package com.example.myProject;

import java.io.Serializable;

public class Numbers implements Serializable {

    private static final long serialVersionUID = -5384438724532423282L;


.
.
.
}

这里的代码来自文件"in“和"out”

代码语言:javascript
复制
package com.example.myProject;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;

public class StreamControl {
    public static void exportNumbers(List<Numbers> number, Context ctx) {

        String fileName = "MyCacheFile.ser";
        File cacheFile = new File(fileName);

        FileOutputStream fos = null;
        try {
            // With this line is it not working everytime.
            // File not found exception
            // But to make my own file with "createNewFile()" is not working
            // in data/data i have just read permission.
            fos = new FileOutputStream(cacheFile);

            // If i use this line i have less problems.
            // All Informations "i used Toast on a lot of places" was god.
            // But after it, it was nowhere a file to found.
            //fos = ctx.openFileOutput(fileName, Context.MODE_PRIVATE);

            ObjectOutputStream oos = null;
            try {
                oos = new ObjectOutputStream(fos);
                oos.writeInt(number.size());
                for (int i =0; i < number.size(); i++) {
                oos.writeObject(new Numbers(((Numbers)number.get(i)).getNumbers()));
                }
            }
            catch (IOException e1) { e1.printStackTrace(); }
            finally {
                try {
                    if (oos != null) { oos.close(); }
                }
                catch (IOException ex) { }
            }
        }
        catch (FileNotFoundException e2) { e2.printStackTrace(); }
        finally {
            try {
                if (fos != null) { fos.close(); }
            }
            catch (IOException ex) { ex.printStackTrace(); }
        }
    }

    public static List<Numbers> importNumbers(Context ctx) {

        String fileName = "MyCacheFile.ser";
        int count = 0;
        List<Numbers> number = new ArrayList<Numbers>();

        FileInputStream fis = null;
        try {
            fis = new FileInputStream(fileName);
            ObjectInputStream ois = null;
            try {
                ois = new ObjectInputStream(fis);

                count = ois.readInt();
                for (int i = 0; i < count; i++) {
                    number.add(new Numbers(((Numbers) ois.readObject()).getNumbers()));
                }
            }
            catch (IOException ex) { ex.printStackTrace(); }
            catch (ClassNotFoundException ex) { ex.printStackTrace(); }
            finally {
                try {
                    if (ois != null) { ois.close(); }
                }
                catch (IOException ex) { ex.printStackTrace(); }
            }
        }
        catch (FileNotFoundException ex) { ex.printStackTrace(); }
        finally {
            try {
                if (fis != null) { fis.close(); }
            }
            catch (IOException ex) { ex.printStackTrace(); }
        }
        return number;
    }
}

所以,我希望这是足够的信息。

我期待着

EN

回答 1

Stack Overflow用户

发布于 2014-04-17 20:36:58

当您使用Context.openFileOutput时,您在内部存储中创建了一个文件,并且您无法检查该目录。看看将文件保存到外部存储器的this

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23133076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档