2017-09-22 16 views
1

イメージをビデオに変換しようとしています。サンプルコードを見つけてアプリケーションに使用しました。java.io.FileNotFoundException:output.mp4(読み取り専用ファイルシステム)

public class Main2Activity extends AppCompatActivity { 

     AndroidSequenceEncoder encoder; 
     @RequiresApi(api = Build.VERSION_CODES.N) 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main2); 

      ArrayList<Bitmap> arrayList = new ArrayList<>(); 
      Bitmap b = BitmapFactory.decodeResource(getResources(),R.drawable.empty_collage); 
      Bitmap a = BitmapFactory.decodeResource(getResources(),R.drawable.images); 

      arrayList.add(a); 
      arrayList.add(b); 

      File file = new File("output.mp4"); 

      SeekableByteChannel out = null; 
      try { 
       out = (SeekableByteChannel) NIOUtils.writableFileChannel(String.valueOf(file)); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
       Log.e("msg",e.toString()); 
      } 

      try { 
       encoder = new AndroidSequenceEncoder((org.jcodec.common.io.SeekableByteChannel) out, Rational.R(25,1)); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      Toast.makeText(this, "in for loop", Toast.LENGTH_SHORT).show(); 
      for(int i=0 ;i<arrayList.size() ; i++){ 
       try { 
        encoder.encodeImage(arrayList.get(i)); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      Toast.makeText(this, "out of loop", Toast.LENGTH_SHORT).show(); 
      try { 
       encoder.finish(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      NIOUtils.closeQuietly(out); 
     } 
    } 
    } 

希望、私は非常に迅速に対応得られます。しかし、私は

java.io.FileNotFoundException: output.mp4 (Read-only file system)

のようなエラーを取得しています。ここに私のコードの抜粋です。 ありがとうございます。

答えて

4
File file = new File("output.mp4"); 

これは有用であるとは限りません。書き込むルートの場所を導出するには、常にメソッドを使用します。例えば

、あなたはこれを変更することができます:

File file = new File(getFilesDir(), "output.mp4"); 

か:

File file = new File(getExternalFilesDir(null), "output.mp4"); 
+0

Thanks.Gettingエラー: 'java.lang.RuntimeException:活動ComponentInfo {COMを開始することができません。 graciaapps.newproject/com.graciaapps.newproject.Main2Activity}:java.lang.ClassCastException:org.jcodec.common.io.FileChannelWrapperをjava.nio.channels.SeekableByteChannelにキャストすることはできません android.app.ActivityThread.p erformLaunchActivity(ActivityThread.java:2646) 原因:java.lang.ClassCastException:org.jcodec.common.io.FileChannelWrapperをjava.nio.channels.SeekableByteChannelにキャストできません。 – Rozina

+0

すぐに私を助けてくれることを願っています。@CommonsWare – Rozina

+0

@Rozina:[mcve]を使ってスタックオーバーフローの質問をしてください。これには、新しいクラッシュ用の*完全な* Javaスタックトレースと現在のソースコードが含まれます。 NIOは、特にAndroid 7.0より前は限られているため、Androidで多く使用しない傾向があります。また、Android SDKには 'AndroidSequenceEncoder'もありません。 – CommonsWare

関連する問題