0

audio fileサーバーからクライアントに転送し、別のファイルに書き込もうとしています。はserverクライアントからファイルを読み取っていますが、新しい行を無視して継続的にファイルの内容を読み取っています。たとえば、"I am doing client server program" のようなテキストがあり、ファイル テキストの次の行には "in Java" があります。サーバーは「私はクライアントサーバープログラミングを行っています」と読みますJava。私の質問は、内容を1行ずつ読む方法です..

私のコードは次のとおりです...

*

サーバ

**try
{
`   try
        {
            System.out.println("Im server waiting for client request");
            ss=new ServerSocket(2005);
            Socket s=ss.accept();

             InputStream is = s.getInputStream( );//Input Stream
             BufferedReader fileRead =new BufferedReader(new       InputStreamReader(is));
             String fname = fileRead.readLine( );


            OutputStream os = s.getOutputStream( );//socket output stream
             PrintWriter pw = new PrintWriter(os, true);

             BufferedReader br = new BufferedReader(new FileReader(fname) );//read File

             String str;//initiating string and StringBuffer

             StringBuilder sb=new StringBuilder();

            while((str = br.readLine()) !=  null) // reading line-by-line from file
            {
                sb.append(str);//append to stringBuffer sb

            }
            System.out.println("The string is in server" +sb);

            pw.println(sb);
            pw.flush();
            pw.close();
            is.close();
            fileRead.close();
        os.close();
        pw.close();
        br.close();

        }
        catch(Exception e)
        {
            e.getMessage();
            e.getStackTrace();
            e.getSuppressed();
        }`
The Client side::

    try {
            System.out.println("Im client ..sending request");
            Socket s=new Socket("127.0.0.1",2005);//Initiate Socket

            System.out.println("Enter filename");


            BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));//Take fileName from keyBoard

            String filename=bw.readLine();//Read filename into  a string

            OutputStream dout=new DataOutputStream(s.getOutputStream());//output Stream
            PrintWriter pw=new PrintWriter(dout,true);

            pw.println(filename);//write filename to socket

            InputStream is = s.getInputStream( );//Input Stream
            BufferedReader in =new BufferedReader(new InputStreamReader(is));
            String clstr;
            StringBuilder sd=new StringBuilder();
            while((clstr=in.readLine())!=null)
            {
                sd.append(clstr);
             //clstr=in.readLine();//Read String From socket into "clstr" string

            }
             System.out.println("The string in client is" +sd);

            File f=new File("A://music/kin.txt");//Open a file

            if(!f.exists())
                f.createNewFile();//if not existed create it

            try
            {
            //PrintWriter bf=new PrintWriter(new FileWriter(f)); //Write to a file
                BufferedWriter bf=new BufferedWriter(new FileWriter(f));
            //bf.append(clstr);
            //bf.write(sd);
            bf.append(sd);
            bf.flush();
            bf.close();
            }
            catch(Exception e)
            {
                e.getMessage();
                e.getSuppressed();
                e.getStackTrace();
            }

            System.out.println("The Content written is" +sd);

            bw.close();
            pw.close();
        dout.close();
        in.close();
        is.close();

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
4

1 に答える 1

6

あなたの説明は明確ではありませんが、これが問題だと思います:

while((str = br.readLine()) !=  null) // reading line-by-line from file
{
    sb.append(str);//append to stringBuffer sb
}

からの戻り値には改行が含まれてreadLine() いません...そして、あなたは改行を追加していませんStringBuilder. したがって、次の行を受け取った場合:

  • "最初"
  • "2番目"
  • "三番"

結果は「firstsecondthird」になります。自分で適切な改行を追加するだけです。

// Or whatever line break you want
String lineBreak = System.getProperty("line.separator");
while((str = br.readLine()) != null)
{
    sb.append(str);
    sb.append(lineBreak);
}

本当にこのようなオーディオ ファイルを転送しようとしている場合は、そうすべきではないことに注意してください。オーディオ ファイルはバイナリデータなので、InputStream. a はテキストデータReader用に設計されているため、まったく使用しないでください。

于 2013-04-16T06:11:51.623 に答える