simple Textdatei erstellen

  • 2 Antworten
  • Neuester Beitrag
Diskutiere simple Textdatei erstellen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
1

123thomas

Fortgeschrittenes Mitglied
Hallo Leute,

ich versuche gerade für eine App(nur für mich) eine simple Textdatei erstellen, die folgende Anforderungen erfüllt:

  • Textdatei lesen und schreiben
  • Textdatei kann per USB ausgelsen werden
Sicherheit spielt keine Rolle

Mein Problem ist folgendes, ich bekomme immer die Fehlermeldung:
Code:
07-15 16:09:07.877 20671-20671/com.example.taschenrechner E/Fehler1: /storage/emulated/0/Daten/TR.txt: open failed: ENOENT (No such file or directory)
07-15 16:09:15.957 20671-20671/com.example.taschenrechner E/Fehler2: /storage/emulated/0/Daten/TR.txt: open failed: EISDIR (Is a directory)
Aber ich erstelle doch die Datei unter dem Button onClickButtonSichern und die Berechtigungen:

Code:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Code:
private EditText editText;
    private Button sichern;

    private final String DATEINAME = "/Daten/TR.txt";
    private final String VERZEICHNISS = Environment.getExternalStorageDirectory().getPath();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity4_main);

        editText = (EditText) findViewById(R.id.EditTextText);
        sichern = (Button) findViewById(R.id.ButtonSave);

        String pfad = VERZEICHNISS + DATEINAME;
        File datei;
        //File verzeichniss = new File(VERZEICHNISS);
        datei = new File(pfad);

        //Read text from file
        StringBuilder text = new StringBuilder();
        String ausgelsenentext;

        try {
            BufferedReader br = new BufferedReader(new FileReader(datei));
            String line;

            while ((line = br.readLine()) != null) {
                text.append(line);
                text.append('\n');
            }
            br.close();
            ausgelsenentext = text.toString();
        }
        catch (IOException e) {
          Log.e("Fehler1",e.getMessage());
        }
        editText.setText(text);
    }

    public void onClickButtonSichern(View view)
    {
        String pfad = VERZEICHNISS + DATEINAME;
        File datei;
        //File verzeichniss = new File(VERZEICHNISS);
        datei = new File(pfad);
        if(!datei.exists())
        {
            try {
                datei.mkdirs();
            } catch (Exception e) {
                Log.e("Fehler5",e.getMessage());
            }
            try {
                datei.createNewFile();
            } catch (IOException e) {
                Log.e("Fehler6",e.getMessage());
            }
        }
        try {
            FileOutputStream fileOut = new FileOutputStream(datei);
            dateiSpeichern(fileOut);
            showToast("gespeichert");
        } catch (FileNotFoundException e) {
            Log.e("Fehler2",e.getMessage());
        }
        this.finish();
    }

    private void dateiSpeichern(FileOutputStream fileOut)
    {
        OutputStreamWriter writer = new OutputStreamWriter(fileOut);

        String text = editText.getText().toString();
        try
        {
            writer.write(text);
        }
        catch (IOException e)
        {
            Log.e("Fehler3",e.getMessage());
        }
        finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    Log.e("Fehler4",e.getMessage());
                }
            }
        }
    }

Gruß Thomas
 
swa00

swa00

Moderator
Teammitglied
Hallo Thomas ,

bist du dir 100% sicher , dass das Ziel (pfad) exisitiert ???

Je nach device heissen die Ziele anders.
Um das zu umgehen , verwende ich folgendes :

Code:
 /////////////////////////////////////////////////////////////
    public class DiskHelper
    {

        public static final int MODE_INTERNAL = 0;
        public static final int MODE_EXTERNAL = 1;
        public static final int MODE_EXTERNAL_SD = 2;
        private StatFs statFs;
        protected String path;
        public DiskHelper(int mode)
        {
            try
            {
                if(mode == 0)
                {
                    path = Environment.getRootDirectory().getAbsolutePath();
                    statFs = new StatFs(path);
                    statFs.restat(path);
                }
                else if(mode == 1)
                {
                    path = Environment.getExternalStorageDirectory().getAbsolutePath();
                    statFs = new StatFs(path);
                    statFs.restat(path);
                }
                else
                {
                    for(String str : getExternalMounts())
                    {
                        path = str;
                        statFs = new StatFs(str);
                        statFs.restat(str);
                        break;
                    }
                }
            }
            catch(Exception e)
            {
                //MyLog.d(TAG,;
            }
        }
        public String getPath()
        {
            return path;
        }
        public long getTotalMemory()
        {
            if(statFs == null)
            {
                return 0;
            }
            long total = ((long)statFs.getBlockCount() * (long)statFs.getBlockSize());
            return total;
        }

        public long getFreeMemory()
        {
            if(statFs == null)
            {
                return 0;
            }

            long free = ((long)statFs.getAvailableBlocks() * (long)statFs.getBlockSize());
            return free;
        }

        public long getBusyMemory()
        {
            if(statFs == null)
            {
                return 0;
            }
            long   total  = getTotalMemory();
            long   free   = getFreeMemory();
            long   busy   = total - free;
            return busy;
        }


        public HashSet<String> getExternalMounts()
        {

            final HashSet<String> out = new HashSet<String>();
            String reg = "(?i).*vold.*(vfat|ntfs|exfat|fat32|ext3|ext4).*rw.*";
            String s = "";
            try
            {
                final Process process = new ProcessBuilder().command("mount").redirectErrorStream(true).start();
                process.waitFor();
                final InputStream is = process.getInputStream();
                final byte[] buffer = new byte[1024];
                while(is.read(buffer) != -1)
                {
                    s = s + new String(buffer);
                }
                is.close();
            }
            catch(Exception e)
            {
                //KLog.error(e);
            }
            final String[] lines = s.split("\n");
            for (String line : lines)
            {
                if(!line.toLowerCase(Locale.US).contains("asec"))
                {
                    if(line.matches(reg))
                    {
                        String[] parts = line.split(" ");
                        for(String part : parts)
                        {
                            if(part.startsWith("/"))
                            {
                                if(!part.toLowerCase(Locale.US).contains("vold"))
                                {
                                    out.add(part);
                                }
                            }
                        }
                    }
                }
            }
            return out;
        }
        private static final long  MEGABYTE = 1024L * 1024L;
        public String humanReadableByteCount(long bytes, boolean si)
        {
            if(true)
            {
                long ret =  bytes / MEGABYTE;
                return ret + " MB";
            }
            int unit = si ? 1000 : 1024;
            if (bytes < unit) return bytes + " B";
            int exp = (int) (Math.log(bytes) / Math.log(unit));
            String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i");
            return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
        }

Aufruf :

Code:
  final DiskHelper sdDiskHelperEXT = new DiskHelper(DiskHelper.MODE_EXTERNAL_SD);
        String EXTERNAL_STORAGE = sdDiskHelperEXT.getPath();
        final DiskHelper sdDiskHelperINT = new DiskHelper(DiskHelper.MODE_INTERNAL);
        String INTERNAL_STORAGE = sdDiskHelperINT.getPath();

lg
Stefan
 
1

123thomas

Fortgeschrittenes Mitglied
Hallo,

Danke erstmal für deine Antwort. Ich war leider die letzte Woche unterwegs, daher erst die späte Antwort. Ich habe dein Disk Helper eingebaut. Leider brachte dieser nicht den gewünschten Erfolg. (Eingebaut lasse ich es Trotzdem :p) Das lag daran, dass ich wohl das mit den Verzeichniss erstellen anders gedacht hatte als es wirklich ist.

Ich hatte vorher:
Code:
File datei = new File(pfad);
        if(!datei.exists())
        {
            try {
                datei.mkdirs();
            } catch (Exception e) {
                Log.e("Fehler5",e.getMessage());
            }
            try {
                datei.createNewFile();
            } catch (IOException e) {
                Log.e("Fehler6",e.getMessage());
            }
        }
nacher:
Code:
File datei = new File(pfad);
        File verzeichniss = new File(EXTERNAL_STORAGE);
        if(!datei.exists())
        {
            try {
                verzeichniss.mkdirs();
            } catch (Exception e) {
                Log.e("Fehler5",e.getMessage());
            }
            try {
                datei.createNewFile();
            } catch (IOException e) {
                Log.e("Fehler6",e.getMessage());
            }
        }
Somit ist das Thema gelöst, danke für die mithilfe:)

Gruß
 
Ähnliche Themen - simple Textdatei erstellen Antworten Datum
11
2