Android内部存储;创建文件

时间:2012-11-01 21:11:59

标签: android file storage internal

我试图在内部为另一个应用创建基本文件。所以我写了一个基本的应用来解决问题,然后将其添加到其他应用程序。这是猫的日志

10-09 17:56:14.579: D/dalvikvm(11092): Not late-enabling CheckJNI (already on)
10-09 17:56:15.599: E/Trace(11092): error opening trace file: No such file or directory (2)
10-09 17:56:16.549: D/gralloc_goldfish(11092): Emulator without GPU emulation detected.
10-09 17:57:20.158: D/dalvikvm(11092): Debugger has detached; object registry had 1 entries
10-09 17:57:30.078: E/Trace(11662): error opening trace file: No such file or directory (2)
10-09 17:57:30.759: D/gralloc_goldfish(11662): Emulator without GPU emulation detected.

创建文件。但是,当我实现代码创建一个关闭onClick的文件时,它没有。或者当我将文件创建在主类以外的类中时,它没有创建该文件。

这是我的基本代码:     `package com.newapp;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    newFile();

}
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    public String timeStamp(){
        Date myDate = new Date();
        return (DateFormat.getDateInstance().format(myDate) + " " +                         DateFormat.getTimeInstance().format(myDate));
    }

    public void newFile (){
         String FILENAME = timeStamp();
         String string = "hello world!";

         FileOutputStream fos = null;
            try {
        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
            } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
                e.printStackTrace();
        }
         try {
                fos.write(string.getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
        e.printStackTrace();
        }
         try {
                    fos.close();
            } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}`

我现在摆脱了按钮和其他课程。这是除了他们给你的普通hello worlds屏幕以外的所有代码和一个未经修改的清单。

修改 上面的代码工作i,文件在/data/data/com.newapp/files中创建 再次运行它以确保创建一个文件并从cat中获取。

10-09 17:57:29.482:D / dalvikvm(11662):没有迟到的CheckJNI(已经开启) 10-09 17:57:30.078:E / Trace(11662):错误打开跟踪文件:没有这样的文件或目录(2) 10-09 17:57:30.759:D / gralloc_goldfish(11662):未检测到GPU仿真的仿真器。 10-09 18:53:35.238:D / dalvikvm(11662):调试器已分离;对象注册表有1个条目 10-09 18:53:53.389:E / Trace(14975):错误打开跟踪文件:没有这样的文件或目录(2) 10-09 18:53:54.658:I / Choreographer(14975):跳过36帧!应用程序可能在其主线程上做了太多工作。 10-09 18:53:54.668:D / gralloc_goldfish(14975):未检测到GPU仿真的仿真器。

我现在要将它移到自己的班级并试一试。

这是在自己的类中创建文件:     包com.newapp;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;    
import java.util.Date;

import android.app.Activity;
import android.content.Context;

public class NewFile extends Activity {

public String timeStamp(){
    Date myDate = new Date();
    return (DateFormat.getDateInstance().format(myDate) + " " +             DateFormat.getTimeInstance().format(myDate));
}

public NewFile (){
     String FILENAME = timeStamp();
     String string = "hello world!";

     FileOutputStream fos = null;
    try {
        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     try {
        fos.write(string.getBytes());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     try {
        fos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }
 }

这是主要活动:

package com.newapp;



import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;


public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    NewFile firstone = new NewFile();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}   
}

最后,我尝试了几种不同的方法来使用NewFile();作为构造函数只是一个常规方法并调用firstone.newFile(); 遇到很多麻烦,它现在甚至不能在虚拟设备或平板电脑上运行。

1 个答案:

答案 0 :(得分:1)

我在朋友的帮助下找出了问题所在。 您不能在新课程中“扩展活动”。 您需要使用上下文来引用该类。 NewFile类的最终代码是:

package com.newapp;

import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
import android.content.Context;

public class NewFile{

public String timeStamp(){
    Date myDate = new Date();
    return (DateFormat.getDateInstance().format(myDate) + " " + DateFormat.getTimeInstance().format(myDate));
}

public void createFile(Context c) throws IOException{
     String FILENAME = timeStamp();
     String string = "hello world!";

     FileOutputStream fos = c.openFileOutput(FILENAME, Context.MODE_PRIVATE);
    fos.write(string.getBytes());
    fos.close();


}
}

在主要课程中你只需要打电话:

NewFile firstfile = new NewFile();
firstfile.createFile(getBaseContext());

在onCreate方法中。

由于