2015-08-27 1 views
0

Я искал все о том, как создать файл, а затем написать его во внутреннем хранилище на пару дней и не могу найти ничего, что работает или что я могу понять. Я никогда не делал ничего подобного раньше, поэтому я довольно потерян.Android Create/Write File во внутреннем хранилище

Согласно странице сайта разработчика Android, этот код должен создавать папку, если она не существует, но когда я ее вызываю, она дает мне ошибку. Класс расширяет SurfaceView, если это что-то значит.

public GameView(Context context) { 
    super(context); 

    gameLoopThread = new GameLoopThread(this); 
    holder = getHolder(); 
    holder.addCallback(new Callback() { 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      System.exit(1); 
     } 

     public void surfaceCreated(SurfaceHolder holder) { 
      gameLoopThread.setRunning(true); 
      gameLoopThread.start(); 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, 
       int width, int height) { 

     } 

    }); 

    createFile(); 

} 

public void createFile() { 
    String FILENAME = "hello_file"; 
    String string = "hello world!"; 

    FileOutputStream fos; 
    try { 
     fos = getContext().openFileOutput(FILENAME,Context.MODE_PRIVATE); 
     fos.write(string.getBytes()); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Все, что я хочу быть в состоянии сделать, в конце концов, это создать файл во внутренней памяти, сохранить целое (мои игроки получают это в игре) в этот файл, а затем иметь возможность загружать и сохранять это.

спасибо.

+0

У вас есть ошибка? Можете ли вы вставить свой логарифм? – Actiwitty

+1

Если вы хотите реализовать постоянные пары ключевых значений, я бы предложил [Android SharedPreferences] (http://developer.android.com/reference/android/content/SharedPreferences.html). – MeetTitan

+0

Прошу прощения, потребовалось некоторое время. "08-27 15: 10: 46.005: E/Trace (737): файл с открытием ошибки: нет такого файла или каталога (2)", <- Это единственная ошибка, которая появляется в красном в моем журнале cat –

ответ

0

Если вы хотите использовать постоянные пары значений ключа, я бы предложил Android's SharedPreferences. Использование SharedPreferences так же легко, как:

final SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); //MY_PREFS_NAME could be something useful, like username, so your data can be easily separated. 

final static SCORE = "score"; //This variable simply holds the string "score", so we can tell the SharedPreferences which data we'd like. 
int getScore() { 
    return prefs.getInt(SCORE, 0); // second argument is default value if there is no value for key. 
} 

void setScore(int score) { 
    Editor editor = prefs.edit(); 
    editor.putInt(SCORE, score); 
    editor.commit(); 
} 

Эти настройки будут сохраняться в течение нескольких прогонов вашего приложения.

+0

Хм, посмотрю, что я могу придумать. –

0

Вот как я пишу и читаю файлы фотографий локально. Аналогичный процесс может применяться для обработки файлов разных типов. Просто используйте другое расширение файла, а другой метод возвращает тип данных.

// Creates an ImageFile 
private File createNewPhotoFile() throws IOException { 

    String imageFileName = "JPEG"; 
    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
    File image = File.createTempFile(
      imageFileName, /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
    ); 

    // Save a file: path for use with ACTION_VIEW intents 
    mCurrentPhotoPath = "file:" + image.getAbsolutePath(); 

    image.createNewFile(); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    FileOutputStream fo = new FileOutputStream(image); 
    fo.write(stream.toByteArray()); 
    fo.close(); 


    return image; 
} 

// Retreave and convert from file to Bitmap 
private Bitmap retreaveImageFromFile(ImageView target, File fileForPath) { 

    // Get the dimensions of the View 
    int targetW = target.getWidth(); 
    int targetH = target.getHeight(); 

    // Get the dimensions of the bitmap 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(fileForPath.getAbsolutePath(), bmOptions); 
    int photoW = bmOptions.outWidth; 
    int photoH = bmOptions.outHeight; 

    // Determine how much to scale down the image 
    int scaleFactor = 4; //Math.min(photoW/targetW, photoH/targetH); 

    // Decode the image file into a Bitmap sized to fill the View 
    bmOptions.inJustDecodeBounds = false; 
    bmOptions.inSampleSize = scaleFactor; 

    Bitmap bitmap = BitmapFactory.decodeFile(newPhotoFile.getAbsolutePath(), bmOptions); 

    return bitmap; 
}