2

このコミュニティにはすでに数回相談しましたが、自分で問題を解決するにはまだ経験が浅いようです。

私の最近の問題は次のとおりです。

アプリのプライベート ストレージ (ルート化されていないデバイス) に作成されたファイルがあります。私はそれに書き込み、それから読み取ることができます。しかし:ファイルに追加情報を追加する方法がわかりません(別のFOSが最初の配列の最後に配列を簡単に追加すると思いますが、よくわかりません)、どうすれば見られるかわかりません特定の文字列など。

public static Runnable cfgsetlanecount(int l1, int l2, int l3, int l4,
        int l5, int l6, int l7, int l8, Context context)

        throws IOException {
    System.out.println("" + l1 + l2+ l3+l4+l5+l6+l7+l8);
    FileOutputStream fos = context
            .openFileOutput(cfg, Context.MODE_PRIVATE);
    String lanecount = "lanecount: " + (Integer.valueOf(l1).toString())
            + "" + (Integer.valueOf(l2).toString()) + ""
            + (Integer.valueOf(l3).toString()) + ""
            + (Integer.valueOf(l4).toString()) + "" + l5 + "" + l6 + ""
            + l7 + "" + l8;
    byte buf[] = lanecount.getBytes(); 
    fos.write(buf);
    fos.close();
    cfggetlanecount();
    return null;
}

public static Runnable cfggetlanecount() throws IOException {
    String collected =  null;
    FileInputStream fis = context.openFileInput(cfg);
    byte input[] = new byte [fis.available()];
    while (fis.read(input)!=-1){
        collected = new String (input);

        System.out.println(collected);
    }fis.close();
    return null;

}

これは私が今までやってきたことのコードです。time値が 12:00 の文字列を追加し、それらをさまざまなメソッドから読み取りたいと考えています。レーンカウント文字列の値は 10101010 です。この値が必要なだけです。文字列を検索して、文字列lanecount:を検索して 12:00 を取得します。time:

編集:

まず、この行をファイルに追加する必要があります。これは次のようになります。

line1: レーンカウント: 10001000

line2: 時刻: 12:00

line3: timex: 05:00

line4: 任意の単語: fhfbjklös

line5: ストップバイト: 0x28

. . .

そして今、キーワードtimexの値を取り出すことができるメソッド、またはレーンカウントを読み取ることができる別のメソッドが必要です。そして、Stopbyte の値を取得できるものかもしれません。

次に、キーワード時間の値を編集できるメソッドが必要です。

4

2 に答える 2

4

説明したファイルの内容に基づいて、自然なプロパティ ファイルのように聞こえます。

# This is a comment:
lanecount=10001000
time=12:00
timex=05:00
anyword=fhfbjklös
Stopbyte=0x28
... ...

java.util.Propertiesを使用すると、すべての汚い作業が行われます。

# Write properties to private storage:
FileOutputStream fos = context.openFileOutput(cfg, Context.MODE_PRIVATE);
Properties props = new Properties();
props.setProperty("lanecount", "10001000");
props.setProperty("time", "12:00");
prop.store(fos, "This is a comment"); // store() is threadsafe
fos.close();

... ...

# Read properties from private storage: 
FileInputStream fis = context.openFileInput(cfg);
Properties props = new Properties();
props.load(fis); // load() is threadsafe
fis.close();
String lanecount = props.getProperty("lanecount");
String time = props.getProperty("time");

要件がわかりません。代わりに、アプリのプライベート ストレージの代わりにSharedPreferencesから構成をロード/保存できます。

# Write properties to shared preferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor editor = prefs.edit();
editor.putString("lanecount", "10001000");
editor.putString("time", "12:00");
editor.commit();

... ...

# Read properties from shared preferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String lanecount = prefs.getString("lanecount", "defauleValue");
String time = prefs.getString("time", "defauleValue");

お役に立てれば。

于 2013-03-26T22:01:01.140 に答える
0
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

import android.content.Context;
import android.os.Environment;

import com.bowltec.own.OwnClass;

public class Config_cbt extends OwnClass{
    static String cfg = "config.cbt";
    static int coll;
    static Properties props;

    public static void createcfg() throws FileNotFoundException, IOException {
        String packageName = acti.getPackageName();
        String path = Environment.getExternalStorageDirectory()
                .getAbsolutePath() + "/Android/data/" + packageName + "/files/";
        new File(path).mkdirs();
        props = new Properties();
    }

    public static void cfgset(String key, String val)
            throws IOException {
        FileOutputStream fos = acti.openFileOutput(cfg, Context.MODE_PRIVATE);
            props.setProperty(key, val);
            props.store(fos, "...");
    }

    public static int cfgget(String tocollect) throws IOException {

        FileInputStream fis = context.openFileInput(cfg);
        props.load(fis);
        fis.close();
        String collected = props.getProperty(tocollect, "0");
        coll = Integer.valueOf(collected);
        return coll;
    }
}

これが私が今持っている方法です。これは完璧に機能します。これは、同じ問題で問題を抱えているすべての人のためのものです。ご自由にお使いください。

actiOwnClass私の使用で宣言されてprotected static Activity acti;おり、acti = this;

于 2013-04-02T10:18:16.273 に答える