A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 黑马刘涛 中级黑马   /  2012-7-19 11:44  /  4615 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马刘涛 于 2012-7-19 14:32 编辑
  1. package com.itcast.test;
  2. import java.io.*;
  3. public class PrintDemo {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) throws Exception {
  8.                 // TODO Auto-generated method stub
  9.                 BufferedInputStream bufis =
  10.                                 new BufferedInputStream(new FileInputStream("G:\\KuGou\\周华健 - 刀剑如梦.mp3"));

  11.                         PrintStream out = new PrintStream(new FileOutputStream("C:\\Users\\shandawang\\Desktop\\a.txt"),true);

  12.                         byte[] buf = new byte[1024];
  13.                         int len = 0;
  14.                         while((len = bufis.read(buf,0,1024)) != -1)
  15.                         {
  16.                                         out.write(buf,0,len);                        
  17.                                 //out.flush();
  18.                         }
  19.                         out.close();
  20.                         bufis.close();
  21.         }
  22. }
复制代码
我要将一个音乐媒体文件的二进制数据转换成1010001这样的字符串写到一个文本文件中该怎么做?上面的代码只是做了一个复制的工作。

11 个回复

倒序浏览
你的byte数组不就是存放的二进制数据,直接循环把里面的东西打印出来应该就OK了
回复 使用道具 举报
陌花╮有意、 发表于 2012-7-19 12:05
你的byte数组不就是存放的二进制数据,直接循环把里面的东西打印出来应该就OK了 ...

没有打印byte类型数据的方法。
回复 使用道具 举报
package test;
import java.io.*;
public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
                // TODO Auto-generated method stub
             InputStream bufis = new FileInputStream("I:\\Music\\范逸臣-无乐不作.lrc");

             FileWriter out = new FileWriter("I:\\a.txt");
                                byte[] bytes=new byte[1];//因为后边的操作无法截出最后的一个数组的长度,所以这里我用了一个1,以免造成最后一个数组的重复取值。
                        int len = 0;
                        while((len = bufis.read(bytes)) != -1)
                        {
                                for(Byte byt:bytes){//这里把所有的字节取出来
                                        out.write(Integer.toBinaryString(byt.intValue()));//把字节转换成int类型,在用Integer类把其转换成二进制形式输出
                                        out.flush();
                                }
                        }
                        out.close();
                        bufis.close();
        }
}
//你的读取流已经是有缓冲区的了,其内部已经封装了一个数组了,你就不用再用数组装了。。。
//注意,把文件变成二进制占用的空间比较大,我用了一个400多k的MP3文件读出来的是一个8m的txt,打都打不开(电脑比较垃圾),所以用了一个比较小的歌词文件。。。写出来内容是二进制的。。。
回复 使用道具 举报
本帖最后由 黑马刘涛 于 2012-7-19 13:28 编辑

  1. <P>package com.itcast.test;</P>
  2. <P>import java.io.*;</P>
  3. <P>public class ByteToStringDemo {</P>
  4. <P> /**
  5.   * @param args
  6.   */
  7. public static void main(String[] args) throws Exception {
  8.   // TODO Auto-generated method stub
  9.   byte[] buf = new byte[1024];
  10.   InputStream is = new BufferedInputStream(System.in);
  11.      PrintStream ps = new PrintStream(System.out);
  12.      is.read(buf);
  13.      for(byte b : buf) {
  14.       ps.print(Byte.toString(b));
  15.      }
  16. }
  17. }
  18. </P>
复制代码
即使转换用Byte类的toString方法,也只是将byte类型的数据转换成其十进制编码将编码打印。若将这个十进制编码值转换为二进制编码应该是可能的吧

捕获.PNG (6.27 KB, 下载次数: 56)

捕获.PNG
回复 使用道具 举报
呵呵 这样弄出来你想干啥啊
回复 使用道具 举报
王达 初级黑马 2012-7-19 13:47:50
7#
因为得出很多数值都是负数啊,负数前边都是1111啊
回复 使用道具 举报
李伟 中级黑马 2012-7-19 13:52:11
8#
import java.io.*;
public class PrintDemo {

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
                // TODO Auto-generated method stub
                BufferedInputStream bufis =
                                new BufferedInputStream(new FileInputStream("F:\\KuGou\\郑源 - 一万个理由.mp3"));

                        //PrintStream out = new PrintStream(new FileOutputStream("F:\\Program Files\\eclipseWorkspace\\javaenhance\\src\\cn\\itcast\\test\\m.word"),true);
                          FileWriter out=new FileWriter("F:\\Program Files\\eclipseWorkspace\\javaenhance\\src\\cn\\itcast\\test\\m.word");                          
                        //byte[] buf = new byte[1024];
                        //int len = 0;
                        int ch=-1;
                        System.out.println("ok");
                        while((ch = bufis.read()) != -1)
                        {
                                //System.out.println(ch);
                                String s=Integer.toBinaryString(ch);
                                //System.out.println(s);
                                        out.write(s);
                                //out.flush();
                        }
                        
                        File f=new File("F:\\Program Files\\eclipseWorkspace\\javaenhance\\src\\cn\\itcast\\test\\m.mp3");
                        System.out.println(f.exists());
                        System.out.println("okok");
                        out.close();
                        bufis.close();
        }
}
回复 使用道具 举报
在循环里加上
  1. for(int i = 0; i < b.len; i++)   
  2. {
  3.   System.out.print(Integer.toBinaryString(buf [i] ) );
  4. }
复制代码
回复 使用道具 举报
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;

public class C{
   public static void main(String[] args) {
         copy();
}
   public static void copy(){
           try {
                   BufferedWriter bw=new BufferedWriter(new FileWriter("c:/copy.txt"));
                BufferedInputStream bi=new BufferedInputStream(new FileInputStream("c:/a.mp3"));
                byte [] b=new byte[1024];
                int len=0;
                while((len=bi.read(b))!=-1){
                        for(int x=0;x<len;x++){
                                bw.write(Integer.toBinaryString(b[x]));
                        }
                }
                bi.close();
                bw.close();
          
        } catch (FileNotFoundException e) {
                e.printStackTrace();
        }
        catch(Exception e){
                e.printStackTrace();
        }
   }
}
回复 使用道具 举报
  1. package com.itcast.test;

  2. import java.io.BufferedInputStream;
  3. import java.io.FileInputStream;

  4. public class PrintDemo2 {

  5.         /**
  6.          * @param args
  7.          * @throws Excet
  8.          */
  9.         public static void main(String[] args) throws Exception {
  10.                 // TODO Auto-generated method stub
  11.                 BufferedInputStream bufis =
  12.                 new BufferedInputStream(new FileInputStream("G:\\KuGou\\林宥嘉 - 说谎-.krc"));
  13.                 int ch=-1;
  14.         System.out.println("ok");
  15.         /*public abstract int read()
  16.          *        throws IOException从输入流中读取数据的下一个字节。
  17.          *返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。
  18.          */
  19.         while((ch = bufis.read()) != -1) {
  20.             String s=Integer.toBinaryString(ch);
  21.             System.out.println(s);      
  22.         }                        
  23.         bufis.close();
  24.         }
  25. }
复制代码
结贴。谢谢诸位。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马