7月6日暑期培训

一、从菜鸟教程练习了一个简单的小程序用来合并两段音乐。

大体思路是这样的:

1. 使用 FileInputStream 输入两个音频F:/workspace/2下的两个2.mp3 和1.MP3文件

2. 使用 FileInputStream的skip(long n) 方法跳过特定字节长度的音频文件,比如说:输入 skip(1024*1024*3),这样就能丢弃掉音频文件前面的 3MB 的内容。

3. 截取中间特定长度的音频文件:每次输入 8KB 的内容,使用 count 记录输入次数,达到设置的次数就终止音频输入。比如说要截取 2MB 的音频,每次往输入流中输入 8KB 的内容,就要输入 1024*2/8 次。

4. 往同一个输出流 FileOutputStream 中输出音频,并生成文件,实现音频混合。

5.查看目录下,会有一个新的合并文件3.mp3

代码如下:

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class MusicC {

    public static void main(String[] args)
    {
        FileOutputStream f1=null;
        FileInputStream f2=null;
        String fileNames[] = {"F:/workspace/2/2.mp3","F:/workspace/2/1.mp3"};
        byte by[] =new byte[1024*8];
        try 
        {
            f1=new FileOutputStream("F:/workspace/2/3.mp3");
            for(int i=0;i<2;i++)
            {
                int count=0;
                f2=new FileInputStream(fileNames[i]);
                f2.skip(2014*1024*3);
                while (f2.read(by)!=-1)
                {
                f1.write(by);
                count++;
                System.out.print(count);
                if (count==(1024*2/8)) break;                    
                }        
                            
            }
        }
        catch (Exception e) 
        {
         e.printStackTrace();
        }
    }

}

二、列出某种类型的文件

有时需要列出目录下指定类型的文件,例如:. java、. txt 等扩展名的文件。

可以使用File类的下述两个方法,列出指定类型的文件:

  •  1、public String[ ] list(FilenameFilter obj) 该方法用字符串的形式返回目录下的指定类型的所有文件
  •  2、public File[ ] listFile(FilenameFilter obj) 该方法用 File 对象形式返回目录下的指定类型的所有文件

上述两个方法的参数 FilenameFilter 是一个接口,该接口有一个方法: accept(File f,String name);

File 对象 f 调用 list 方法时,需向该方法传递一个实现 FilenameFilter 接口的对象,list 方法执行时,参数 obj 不断回调接口方法accept(File f,String name),该方法中的参数 f 为,调用 list 的当前目录,参数 name 被实例化为当前目录中的一个文件名,当接口方法返回 true 时,list 方法就将名字为 name 的文件存放到返回的数组中。

三、用接口创建一个类

四、抽象类

使用 abstract class 来定义抽象类。抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

遇到了一个问题,报错:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor

翻译:大概意思就父类已经定义了一个有参构造函数,你是人家儿子,你老爸都弄了个构造函数,你不得调用人家的构造函数呀,所以呀,子类应该通过super关键字显示调用父类的有参构造函数。在子类中:public AbstractTest(String name, String address, int number) {     super(name, address, number); }

  • 1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

  • 2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

  • 3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

  • 4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

  • 5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值