2016-07-03 12 views
0

私はJavaでFileOutputStreamとBufferedOutputStreamを使ってファイルを書き込むクラスを持っています。これは正常に動作していますが、私の目的は、1つではなく、いくつかのファイルをjavaに書きたいということです。ここに私のコードはここfileBack方法はループをn回のための内部の別のクラスから呼び出され Javaでファイルのリストを書く方法

public class FileToBeTaken{ 


public void fileBack(byte [] output) { 

    FileOutputStream fop = null; 
    BufferedOutputStream bos = null; 
     File file; 


     try {  
      file= new File("/Users/user/Desktop/newfile.txt"); 

      fop = new FileOutputStream(file); 

      bos = new BufferedOutputStream(fop); 

      // if file doesnt exists, then create it 
      if (!file.exists()) { 
       file.createNewFile(); 
      } 



      bos.write(output); 
      bos.flush(); 
      bos.close(); 

      System.out.println("Done"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (bos != null) { 
        bos.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

} 

のJava

で書かれています。だから毎回私のコードは私はちょうど最後の反復のファイルを取るので、私は自分のデスクトップに新しいファイルを書く必要があります。また、このクラスへのパラメータとしての各反復では、 "byte []出力によって得られる1バイトの配列を送信することに言及する必要があります。

+0

あなたはrunnale例を提供していただけますか? – Colourfit

+0

明らかに、パラメータを関数に渡すことができます。なぜなら、関数をファイルの内容に使用するからです。私はあなたがパラメータとしてファイル名を渡すのを妨げていることを理解していません。 – njzk2

+0

@ njzk2私はこのクラスの中でこれらのファイル名を作成したいので、上に書いたので、私は他のクラスのパラメータとしてどのように渡すことができないのでしょうか。 –

答えて

0

ファイルパス..newfile.txtを取り込み、それを関数のパラメータにしてみてください。 n回あなたはmainにforループを置くことができるか、誰がこのオブジェクトをインスタンス化され、それを呼び出す。すべてのことの助けをしていますか?

+0

私は部分を理解していないのであなたは「関数のパラメータにする」と言っています –

+0

@ alex10、@aresはメソッドの署名を 'public void fileBack(byte [] output){'から 'public void fileBack(String fileName、 byte [] output){'、' newfile.txt'のパスを 'fileBack'メソッドで使用するために送ります。 –

2

変更 public void fileBack(byte [] output) {

public void fileBack(String fileName, byte [] output) {

次に、ファイル名を指定して他のクラスのfileBackメソッドを呼び出す場所を変更します。すなわち

byte output[] = //You already provide this byte array 

String fileName = "/Users/user/Desktop/newfile.txt" 

fileBack(fileName, output); 
0

クラス内に1つの静的および非整数のフィールドを追加するだけです。

private static int index=0; 

このように、質問コメントで述べたように、このクラスにファイルの名前を渡す必要はありません。

私はその後、fileBack方法でそれを使用するたびにそのメソッドに一度incremet

上に書いた、このクラス内のこれらのファイル名を作成したいので。それを使用する方法を

public class FileToBeTaken { 

    // index or number of new file, also number of all written files 
    // because it increments each time you call fileBack method. 
    private static int index = 0; 

    public void fileBack(byte[] output) { 

     FileOutputStream fop = null; 
     BufferedOutputStream bos = null; 
     File file; 

     try { 

      // use user_dir to place files on desktop, 
      // even on other machines which have other names except user. 
      String user_dir = System.getProperty("user.home").replace("\\", "/"); 

      // use index to create name of file. 
      file = new File(user_dir+"/Desktop/newfile_" + (index++) + ".txt"); 

      fop = new FileOutputStream(file); 
      bos = new BufferedOutputStream(fop); 

      // if file doesnt exists, then create it 
      if (!file.exists()) { 
       file.createNewFile(); 
      } 

      bos.write(output); 
      bos.flush(); 
      bos.close(); 

      System.out.println("Done - "+file.getName()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (bos != null) { 
        bos.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}  

for (int i = 0; i < 10; i++) { 
    new FileToBeTaken().fileBack("some text".getBytes()); 
} 

出力:ここ
はあなたのコードに変更され

Done - newfile_0.txt 
Done - newfile_1.txt 
Done - newfile_2.txt 
Done - newfile_3.txt 
Done - newfile_4.txt 
Done - newfile_5.txt 
Done - newfile_6.txt 
Done - newfile_7.txt 
Done - newfile_8.txt 
Done - newfile_9.txt 
+0

どうもありがとうございます。それは本当に役に立ちました。Thnxたくさんの男と神があなたを祝福します –

+0

@ alex10あなたの歓迎は、あなたが私の答えが役に立つと思うならば、それを投票して他人と共有してください:)、神もあなたを祝福します。 –

+0

私はそれが私のために働いた瞬間から投票しました –

関連する問題