FileName bei ausgabedatei?

  • Antworten:11
  • Bentwortet
Alexander R.
  • Forum-Beiträge: 1.148

22.07.2011, 23:19:00 via Website

Hallo, ich möchte einem File, das ausgegeben wird den Namen und den Versionsnamen geben.
Diese kann ich über
1App app = new App();
2app.getTitle();
3app.getVersionName();

bekommen.

App.java sieht folgendermassen aus

1private String versionName;
2private String title;
3private String installDir;
4
5public String getTitle() {
6 return title;
7 }
8
9 public void setTitle(String title) {
10 this.title = title;
11 }
12
13public String getVersionName() {
14 return versionName;
15 }
16
17 public void setVersionName(String versionName) {
18 this.versionName = versionName;
19 }
20
21public String getInstallDir() {
22 return installDir;
23 }
24
25 public void setInstallDir(String installDir) {
26 this.installDir = installDir;
27 }

Nun schaffe ich es, den normalen namen so wie er ist zu kopieren
1private App info;
2String source_dir = info.getInstallDir();
3String out_file = source_dir.substring(source_dir.lastIndexOf("/") + 1, source_dir.length());

Habe bereits folgendes versucht:

1private App app = new App();
2String out_file = source_dir.substring(app.getTitle() + app.getVersionName(), source_dir.length());

jedoch kann "substring" nur mit "int" umgehen, jedoch sind die abfragen mit "String"
Weiß jemand, wie man das besser machen könnte?

Wie kann ich es nun jedoch schaffen, dass er mir die Datei mit Name + VersionName ausgibt anstatt in diesem komischen?

— geändert am 22.07.2011, 23:24:53

Gruß Alexander

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

25.07.2011, 15:52:07 via App

Jemand eine Idee?

Gruß Alexander

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

28.07.2011, 23:35:10 via App

Habe es nochmal mit anderen Sachen versucht, hat aber leider auch nicht geklappt

hoffe ihr habt eine Idee für mich

Gruß Alexander

Antworten
Gian U.
  • Forum-Beiträge: 117

29.07.2011, 00:00:51 via Website

Ich versteh nicht ganz, was du erreichen willst. Willst du eine Datei ins Installationsverzeichnis schreiben, mit dem Namen und der Version der App oder was?

Mnemono - Efficient learning!

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

29.07.2011, 08:20:47 via App

Nein ich kopieren eine App aus dem Installationsverzeichnis auf die SD Karte und möchte der dann AppName + Version .apk geben

Gruß Alexander

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

29.07.2011, 10:10:01 via Website

Guck nochmal genau hin...

angenommen, in source_dir steht "foo/bar.apk", dann erzeugt das hier:
String out_file = source_dir.substring(source_dir.lastIndexOf("/") + 1, source_dir.length());
die Zeichenfolge "bar.apk" in out_file, wegen dest = src.substring(start, ende).

Wenn du die gleiche Überlegung für das hier:
String out_file = source_dir.substring(app.getTitle() + app.getVersionName(), source_dir.length());
anstellst, bei welcher Wahl von "start" könnte da dann wohl ein Versionsname bei herauskommen?

So wie ich dich verstanden habe, willst du einfach
String out_file =app.getTitle() + app.getVersionName();
haben.

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

29.07.2011, 10:55:42 via Website

Hallo and dev,
Wenn ich deine Methode verwende, bekomme ich als ausgabe genau eine Datei die "nullnull" heisst.
Über getTitle() und getVersionName bekomme ich diese Daten.
Diese müsste ich als mit setTitle() und setVersionName() setzen... Diese sind allerdings als void

Danke schonmal

Gruß Alexander

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

29.07.2011, 13:20:05 via Website

Wenn ich deine Methode verwende, bekomme ich als ausgabe genau eine Datei die "nullnull" heisst.

Das ist nicht "meine Methode", sondern aus deinem
source_dir.substring(app.getTitle() + app.getVersionName(), source_dir.length());
abgeleitet;
wenn das app Objekt nicht einmal initialisiert ist, woher sollen dann deiner Meinung nach Titel und Version kommen?

Demnach hat dein "source_dir" gar nichts mit einem deiner App Objekte zu tun?
Ich dachte eigentlich, deine Source-Schnipsel seien der Übersichtlichkeit halber gekürzt, im Moment drängt sich aber eher der Eindruck auf, als ob es schon an einem Konzept scheitert, bei dem du die gewünschten Daten zu dem Zeitpunkt verfügbar hast.

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

29.07.2011, 13:53:21 via Website

Ich starte folgenden Thread über ein Menu-Item:
1private List<App> mApps;
2private ProgressDialog Fortschritt;
3
4Fortschritt = ProgressDialog.show(MainActivity.this,
5 "Sicherung der Anwendungen", "", true, false);
6 Thread all = new Thread(new BackgroundWork(mApps));
7 all.start();

Darin wird folgendes ausgeführt:
1private static final String BACKUP_LOC = Environment
2 .getExternalStorageDirectory() + "/InfoBackup/";
3 private static final int SET_PROGRESS = 0x00;
4 private static final int FINISH_PROGRESS = 0x01;
5 private ListView mAppsList;
6 private AppListAdapter mAdapter;
7 private List<App> mApps;
8 private App info;
9 App app = new App();
10
11private class BackgroundWork implements Runnable {
12 private static final int BUFFER = 1024;
13
14 private File mDir = new File(BACKUP_LOC);
15 private byte[] mData;
16
17 public BackgroundWork(List<App> data) {
18 mApps = data;
19 mData = new byte[BUFFER];
20
21 /* create dir if needed */
22 File d = new File(BACKUP_LOC);
23 if (!d.exists()) {
24 d.mkdir();
25
26 // then create this directory
27 mDir.mkdir();
28
29 } else {
30 if (!mDir.exists())
31 mDir.mkdir();
32 }
33 }
34
35 public void run() {
36 BufferedInputStream mBuffIn;
37 BufferedOutputStream mBuffOut;
38 Message msg;
39 int len = mApps.size();
40 int read = 0;
41
42 for (int i = 0; i < len; i++) {
43 info = mApps.get(i);
44 String source_dir = info.getInstallDir();
45 /*String out_file = source_dir.substring(
46 source_dir.lastIndexOf("/") + 1, source_dir.length());*/
47 String out_file = app.getTitle() + app.getVersionName();
48
49 try {
50 mBuffIn = new BufferedInputStream(new FileInputStream(
51 source_dir));
52 mBuffOut = new BufferedOutputStream(new FileOutputStream(
53 BACKUP_LOC + out_file));
54
55 while ((read = mBuffIn.read(mData, 0, BUFFER)) != -1)
56 mBuffOut.write(mData, 0, read);
57
58 mBuffOut.flush();
59 mBuffIn.close();
60 mBuffOut.close();
61
62 msg = new Message();
63 msg.what = SET_PROGRESS;
64 msg.obj = i + " von " + len + " Anwendungen gesichert";
65 mHandler.sendMessage(msg);
66
67 } catch (FileNotFoundException e) {
68 e.printStackTrace();
69 } catch (IOException e) {
70 e.printStackTrace();
71 }
72 }
73
74 mHandler.sendEmptyMessage(FINISH_PROGRESS);
75 }
76 }

Der Handler sieht folgendermassen aus:
1private static final int SET_PROGRESS = 0x00;
2 private static final int FINISH_PROGRESS = 0x01;
3
4private Handler mHandler = new Handler() {
5 public void handleMessage(Message msg) {
6
7 switch (msg.what) {
8 case SET_PROGRESS:
9 Fortschritt.setMessage((String) msg.obj);
10 break;
11 case FINISH_PROGRESS:
12 Fortschritt.dismiss();
13 AlertDialog.Builder finish = new AlertDialog.Builder(
14 MainActivity.this);
15 finish.setTitle(R.string.finish_title);
16 finish.setMessage(R.string.finish_message);
17 finish.setCancelable(false);
18 finish.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
19 finish.setPositiveButton(R.string.finish_button,
20 new DialogInterface.OnClickListener() {
21 public void onClick(DialogInterface dialog, int id) {
22 dialog.dismiss();
23 }
24 });
25 AlertDialog finish_alert = finish.create();
26 finish_alert.show();
27 break;
28 }
29 }
30 };

Gruß Alexander

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

29.07.2011, 20:40:11 via Website

info = mApps.get(i);
44 String source_dir = info.getInstallDir();
45 /*String out_file = source_dir.substring(
46 source_dir.lastIndexOf("/") + 1, source_dir.length());*/
47 String out_file = app.getTitle() + app.getVersionName();
48
...wäre dann wohl out_file = info.getTitle() + info.getVersionName();, wenn du als Wert in out_file zB "AppMonster12.34" erwartest.

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

29.07.2011, 21:04:19 via Website

Hallo and dev,
funktioniert nun wunderbar...
Kannst du mir noch sagen, was mein falscher Ansatz war?

Gruß Alexander

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

29.07.2011, 23:36:14 via Website

funktioniert nun wunderbar...

Prima :)


Kannst du mir noch sagen, was mein falscher Ansatz war?

Du hast schon verstanden, was wir an deinem Code geändert haben?
Vorher wurde das uninitialisierte "app" Objekt verwendet, hinterher das "info" Objekt, aus dem du auch das zugehörige source_dir ermittelst.

Sorry wenn ich das jetzt so direkt frage,aber war die jetzt korrigierte Zeile die einzige, die du zu dem geposteten Code selber beigetragen hast?

Antworten