[Android-Studio][Java] - Exceptions i IO

Permalänk
Medlem

[Android-Studio][Java] - Exceptions i IO

Tjenare.

Har ännu ett litet problem i min app som jag håller på att bygga på. Jag försöker skriva till en txt fil för jag vill lagra data från användar-input, jag vill inte använda databas för detta.

Vad jag försöker skriva är en sträng, helt enkelt texten "something".

Okej såhär är min kod just nu:

FileWork (all funktionalitet till att skriva till filer):

package example.lunchlist; import android.util.Log; import java.io.*; import java.util.Date; /** * Created by fredrik on 2013-05-22. */ public class FileWork { boolean Added = false; boolean State = false; public void Write(MyObject objectToWrite) { try { Writer writer = null; try { writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("test.txt"), "utf-8")); writer.write(objectToWrite.toString()); } catch (IOException ex){ // report } finally { try {writer.close();} catch (Exception ex) { Log.i("Error 0x4", "Error printing to file " + ex.getMessage());} } } catch (Exception e) { Log.i("Error: ", e.toString()); } } public boolean Search(MyObject objectToWrite) { try { BufferedReader bf = new BufferedReader(new FileReader("test.txt")); int lineCount = 0; String line; Log.i("0x5 Searching started", objectToWrite.toString() + " inside test.txt"); while (( line = bf.readLine()) != null) { lineCount++; int indexFound = line.indexOf(objectToWrite.toString()); if (indexFound > -1) { State = true; } else{ State = false; } } bf.close(); Log.i("System: 0x5", "Successfully searched"); } catch (Exception e) { Log.i("0x4", e.getMessage()); State = false; } return State; } }

Dold text

Main:

try{ Log.i("Started", "Trying to write to file test.txt"); if(file.Search(newObject)){ Log.i("System: 0x0", "Search: Successfully found new object, cannot add new instance of it"); } else{ file.Write(newObject); Log.i("0x0", "Successfully wrote new object to file"); } } catch(Exception e) { Log.i("0x4", "Write-failure to file out.txt, error described as: " + e.getMessage()); }

Dold text

newObject:

@Override public String toString() { return "something"; }

Dold text

Exceptions:
LÖST
05-22 15:13:32.890: I/0x4(17715):
/test.txt: open failed: ENOENT (No such file or directory)

LÖST
05-22 15:13:32.890: I/Error 0x4(17715):
Error printing to file null

LÖST
05-22 15:22:01.555: I/0x4(22801):
/test.txt: open failed: EROFS (Read-only file system)

Ingen aning
05-22 15:25:41.560: I/0x4(30398):
/storage/sdcard0/test/test.txt: open failed: EACCES (Permission denied)

0x4 betyder bara att det sker i min FileWork klass, det är för filtrering i Logcat bara.

Frågan är alltså: Hur får jag tillåtelse att skriva och läsa från filen?

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Hedersmedlem

Nu utan att ha tid att googla lite åt dig så vill jag minnas från när jag gjorde app (och från vad jag sett av andra appar) så ska det finnas en behörighet (permission) för att läsa/skriva från sdkortet.

Mina 2 cents såhär lite snabbt

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem

Se till att du har android.permission.WRITE_EXTERNAL_STORAGE i ditt manifest.
Samt att du försöker skriva någonstans under Environment.getExternalStorageDirectory(); Om du försöker skriva någon annanstans är risken stor att de mapparna är skyddade.

Googla fram nåt exempel som skriver till SD Kortet så är det nog inga problem.
Sen beroende på hur mkt du ska spara så kan jag rekommendera SharedPreferences för att spara mindre mängd data, mycket smidigare.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

Se till att du har android.permission.WRITE_EXTERNAL_STORAGE i ditt manifest.
Samt att du försöker skriva någonstans under Environment.getExternalStorageDirectory(); Om du försöker skriva någon annanstans är risken stor att de mapparna är skyddade.

Googla fram nåt exempel som skriver till SD Kortet så är det nog inga problem.
Sen beroende på hur mkt du ska spara så kan jag rekommendera SharedPreferences för att spara mindre mängd data, mycket smidigare.

Fast om användaren inte har ett minneskort, kommer troligen appen att sluta funka(?).
Använder nu permission men det hjälpte inte.

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="example.lunchlist" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:permission="android.permission.WRITE_EXTERNAL_STORAGE" android:theme="@style/AppTheme" > <activity android:name="example.lunchlist.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Dold text
Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Fast om användaren inte har ett minneskort, kommer troligen appen att sluta funka(?).
Använder nu permission men det hjälpte inte.

Självklart funkar det utan SD-Kort då Android kommer ge dig PATHen till det utrymmet på interna minnet som Appar får använda. Annars skulle det gå illa med tanke på alla de telefoner som inte har SD-kort nu för tiden. Som sagt, googla lite exempel, och vinn!

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |