首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android追加文本文件

Android追加文本文件
EN

Stack Overflow用户
提问于 2010-12-28 06:35:34
回答 3查看 71.7K关注 0票数 22

我尝试将唤醒时间和睡眠时间从对话框选择器记录到文本文件中,但是对方法commitToFile2的调用并没有附加文本文件“savedData.txt”。

我知道这段代码非常非常脏。我是Java的新手,所以如果有任何其他建议,我将不胜感激。

package com.buttinyourface;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.AdapterView.OnItemClickListener;

public class SettingsActivity extends Activity {

    public int wakeHour;
    public int wakeMinute;
    public int sleepHour;
    public int sleepMinute;
    public String sleepHourText = "No Data";
    public String sleepMinuteText = "No Data";
    public String outputTime = "No Data";
    public String wakeHourText = "No Data";
    private ListView lv;
    Dialog newDialogBox;
    Context appContext;
    protected Context context;
    static final private int WAKE_TIME = 0;
    static final private int SLEEP_TIME = 1;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        final String[] settingsList = getResources().getStringArray(
                R.array.settingsStringArray);
        lv = (ListView) findViewById(R.id.list);
        TextView wakeHourTextView = (TextView) findViewById(R.id.TextView01);
        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                int settingsPosition = position;
                if (settingsPosition == 0) {
                    showDialog(WAKE_TIME);
                    wakeHourText = Integer.toString(wakeHour);
                }
                if (settingsPosition == 1) {
                    showDialog(SLEEP_TIME);
                }
            }
        });
        lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, settingsList));
        wakeHourTextView.setText(outputTime);
    }

    public void onPrepareDialog(int id, Dialog dialog) {
        switch (id) {
        case WAKE_TIME:
            break;
        case SLEEP_TIME:
            break;
        }
    }

    @Override
    public Dialog onCreateDialog(int id) {
        switch (id) {
        case WAKE_TIME:
            return new TimePickerDialog(this, WakeTimeSetListener, wakeHour,
                    wakeMinute, false);
        case SLEEP_TIME:
            return new TimePickerDialog(this, SleepTimeSetListener, sleepHour,
                    sleepMinute, false);
        }
        return null;
    }

    private TimePickerDialog.OnTimeSetListener WakeTimeSetListener =
                          new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            wakeHour = hourOfDay;
            wakeMinute = minute;
            String wakeHourText = Integer.toString(hourOfDay);
            String wakeMinuteText = Integer.toString(minute);
            String preftime = hourOfDay + ":" + minute;
            SimpleDateFormat df = new SimpleDateFormat("HH:mm");
            SimpleDateFormat dfOut = new SimpleDateFormat("hh:mma");
            Date date = null;
            try {
                date = df.parse(preftime);
            } catch (ParseException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            String outputWakeTime = dfOut.format(date);
            try {
                commitToFile(wakeHourText, wakeMinuteText, outputWakeTime);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    private TimePickerDialog.OnTimeSetListener SleepTimeSetListener =
                          new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            sleepHour = hourOfDay;
            sleepMinute = minute;
            String sleepHourText = Integer.toString(hourOfDay);
            String sleepMinuteText = Integer.toString(minute);
            String preftime = hourOfDay + ":" + minute;
            SimpleDateFormat df = new SimpleDateFormat("HH:mm");
            SimpleDateFormat dfOut = new SimpleDateFormat("hh:mma");
            Date date = null;
            try {
                date = df.parse(preftime);
            } catch (ParseException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            String sleepOutputTime = dfOut.format(date);
            try {
                commitToFile2(sleepHourText, sleepMinuteText, sleepOutputTime);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };

    private void commitToFile(String wakeHourText, String wakeMinuteText,
            String outputWakeTime) throws IOException {
        final String entryString = new String("wakeHour=" + wakeHourText
                + ";wakeMinute=" + wakeMinuteText + ";wakeTime="
                + outputWakeTime + ";");
        FileOutputStream fOut = openFileOutput("savedData.txt",
                MODE_WORLD_READABLE);
        OutputStreamWriter osw = new OutputStreamWriter(fOut);
        osw.write(entryString);
        osw.flush();
        osw.close();
    }

    private void commitToFile2(String sleepHourText, String sleepMinuteText,
            String sleepOutputTime) throws IOException {
        final String entryString = new String("sleepHour=" + sleepHourText
                + ";sleepMinute=" + sleepMinuteText + ";sleepTime="
                + sleepOutputTime + ";");
        FileOutputStream fOut = openFileOutput("savedData.txt",
                MODE_WORLD_READABLE);
        OutputStreamWriter osw = new OutputStreamWriter(fOut);
        osw.write(entryString);
        osw.flush();
        osw.close();
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-28 10:01:31

我想明白了.我不得不改一下台词

FileOutputStream fOut = openFileOutput("savedData.txt", MODE_WORLD_READABLE);

FileOutputStream fOut = openFileOutput("savedData.txt",  MODE_APPEND);

在那之后,我可以追加文本文件,而不会覆盖文本文件中已经存在的数据。谢谢你们的协助。我想在google上转到第4页有时是很有用的。

票数 49
EN

Stack Overflow用户

发布于 2013-12-11 15:55:09

这样你就可以保留你的MODE_WORLD_READABLE

openFileOutput("savedData.txt", MODE_APPEND | MODE_WORLD_READABLE ); 
票数 17
EN

Stack Overflow用户

发布于 2010-12-28 08:14:34

在您的commitToFile2()方法中,在fw.append(entryString);之后尝试添加fw.flush();

FileWriterOutputStreamWriter的子类,该类的write()方法不一定会自动“刷新”数据。

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

https://stackoverflow.com/questions/4542318

复制
相关文章

相似问题

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