web-dev-qa-db-ja.com

SDカードにテキストファイルとして保存

   stopWriting = (Button) findViewById(R.id.save);
   stopWriting.setOnClickListener(new OnClickListener() {

       @SuppressLint("SdCardPath")
    public void onClick(View v) {
           // stop recording the sensor data
           try {

               myFile = new File("/sdcard/SensorData/" + txtData.getText() + ".txt");
               myFile.createNewFile();

               sData = new FileOutputStream(myFile);
               myOutWriter = new OutputStreamWriter(sData);
               myBufferedWriter = new BufferedWriter(myOutWriter);
               myPrintWriter = new PrintWriter(myBufferedWriter);

               //if(myFile != null )//stopFlag = mSensorManager.cancelTriggerSensor(null, null);
               Toast.makeText(getBaseContext(), "Done", Toast.LENGTH_SHORT).show();
           } catch (Exception e) {
               Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
           }
       }
   });

ジャイロスコープのデータをtxtファイルに保存しようとしていますが、保存されません。誰かが問題を見つけたら、私がそれを修正するのを手伝ってください。

13
user2967906

このコードを試してみてください。

try {
            File myFile = new File("/sdcard/mysdfile.txt");
            myFile.createNewFile();
            FileOutputStream fOut = new FileOutputStream(myFile);
            OutputStreamWriter myOutWriter = 
                                    new OutputStreamWriter(fOut);
            myOutWriter.append(txtData.getText());
            myOutWriter.close();
            fOut.close();
            Toast.makeText(getBaseContext(),
                    "Done writing SD 'mysdfile.txt'",
                    Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(getBaseContext(), e.getMessage(),
                    Toast.LENGTH_SHORT).show();
        }

許可を取ることを忘れないでください

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
32

このコードを試してください:

public  void writeToFile(String fileName, String body)
    {
        FileOutputStream fos = null;

        try {
            final File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/folderName/" );

            if (!dir.exists())
            {
                     if(!dir.mkdirs()){
                         Log.e("ALERT","could not create the directories");
                     }
            }

            final File myFile = new File(dir, fileName + ".txt");

            if (!myFile.exists()) 
            {    
                myFile.createNewFile();
            } 

            fos = new FileOutputStream(myFile);

            fos.write(body.getBytes());
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

また、マニフェストファイルに外部ストレージのアクセス許可を含めることを忘れないでください。

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

そしてAndroid 6.0でWRITE_EXTERNAL_STORAGEの許可を求める

13
Gil Moshayof

SDへの書き込み権限を使用しましたか?

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
1
Gabi Moreno

まず、この権限をandroidManifest.xmlに宣言します。

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

次に、このコードをボタンのクリックイベントに記述します

 try {
       putStream fOut = new FileOutputStream(myFile);
        OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut);
        myOutWrite File myFile = new File("/sdcard/SensorData.txt");
        myFile.createNewFile();
        FileOutr.append(txtData.getText());
        myOutWriter.close();
        fOut.close();
        Toast.makeText(v.getContext(),"Done writing SD 'SensorData.txt'", Toast.LENGTH_SHORT).show();
        txtData.setText("");
    } 
    catch (Exception e) 
    {
        Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
    }
}
0

これを試して..

stopWriting.setOnClickListener(new OnClickListener() {

       @SuppressLint("SdCardPath")
    public void onClick(View v) {
           // stop recording the sensor data
           try {

               myFile = new File("/sdcard/SensorData/" + txtData.getText() + ".txt");
                myFile.createNewFile();
            FileOutputStream fOut = new FileOutputStream(myFile);
            OutputStreamWriter myOutWriter = 
                                    new OutputStreamWriter(fOut);
            myOutWriter.append(txtData.getText());
            myOutWriter.close();
            fOut.close();
            Toast.makeText(getBaseContext(),
                    "Done writing SD " + txtData.getText() + ".txt",
                    Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(getBaseContext(), e.getMessage(),
                    Toast.LENGTH_SHORT).show();
        }
}
   });

また、マニフェストファイル内の外部ストレージの権限:

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
0
Hariharan

私はこのようにしています

public void write() 
{
    FileOutputStream output = null;

    try
    {
        String mediaState = Environment.getExternalStorageState();
        if(mediaState.equalsIgnoreCase(Environment.MEDIA_MOUNTED))
        {
            output = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + "/download/shared.txt"));

            String str = "Hello, writing to a text file";
            byte[] b = encrypt2(str);
            output.write(b);
        }
        else 
        {
            // error
        }
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            if (output != null)
                output.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

public static byte[] encrypt2(String value)
{
    byte[] input = value.getBytes();
    int nLen = input.length;

    if(nLen % 2 != 0)
    {
        nLen--;
    }

    byte temp;
    for (int i = 0; i < nLen; i += 2)
    {
        temp = input[i+1];
        input[i+1] = input[i];
        input[i] = temp;
    }
    // do encryption
    return Base64.encode(input, Base64.NO_WRAP);
}

この許可も必要です

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
0
Rohit5k2