/*
* 需求:做一个音乐串烧
* 分析:
* 1. 有n个音乐,找到高潮部分,
* 2. 获取高潮部分的流对象
* 3. 把这部分对象保存成一个mp3
* 4. 把它们拼接起来
* */
以下为源码供大家分享:
方法一:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Scanner;
public class SpecialMedlyTest {
public static void main(String[] args) {
SpecialMedlyTest.musicMenu();
}
public static void musicMenu() {
boolean flag = true;
while(true && flag){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个歌曲的路径:");
File f1 = getFile(sc);
System.out.println("请输入第二个歌曲的路径:");
File f2 = getFile(sc);
System.out.println("请输入音乐串烧后的音乐路径(格式:文件路径,文件名):");
File f3 = found(sc);
specialMedly(f1, f2, f3);
System.out.println("是否继续拼接音乐?(Y or N):");
String string = sc.nextLine();
if(string.equalsIgnoreCase("Y")){
flag = true;
}else if(string.equalsIgnoreCase("N")){
flag = false;
System.out.println("你选择退出了程序...");
break;
}else{
System.out.println("输入有误!程序正在自动退出...");
break;
}
}
}
@SuppressWarnings("resource")
public static void specialMedly(File f1, File f2, File f3) {
SequenceInputStream sis = null;
BufferedOutputStream bos = null;
try {
sis = new SequenceInputStream(new FileInputStream(f1), new FileInputStream(f2));
bos = new BufferedOutputStream(new FileOutputStream(f3));
byte[] b = new byte[512];
int len = 0;
try {
while ((len = sis.read(b)) != -1) {
bos.write(b, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (sis != null)
sis.close();
if (bos != null)
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static File found(Scanner sc) {
String str = sc.nextLine();
String[] s = str.split(",");
File f1 = new File(s[0]);
if (!f1.exists()) {
f1.mkdirs();
}
File f2 = new File(s[0], s[1]);
if (!f2.exists()) {
try {
f2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return f2;
}
public static File getFile(Scanner sc) {
while (true) {
File file = new File(sc.nextLine());
if (!file.exists()) {
System.out.println("你输入的文件不存在!请重新输入...");
} else if (file.isDirectory()) {
System.out.println("你输入的是文件夹,输入有误!");
} else {
return file;
}
}
}
}
方法二:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Scanner;
public class SpecialMedlyTest2 {
public static void main(String[] args) {
SequenceInputStream sis = null;
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个歌曲的路径:");
File f1 = getFile(sc);
System.out.println("请输入第二个歌曲的路径:");
File f2 = getFile(sc);
sis = mergeFile(f1, f2);
while (true) {
System.out.println("是否继续增加音乐?(Y or N):");
String string = sc.nextLine();
if (string.equalsIgnoreCase("Y")) {
System.out.println("请输入歌曲的路径:");
File f = getFile(sc);
sis = mergeFile(sis, f);
} else if (string.equalsIgnoreCase("N")) {
System.out.println("你选择了不再添加音乐...");
break;
} else {
System.out.println("输入有误!程序正在合并之前正确的文件...");
break;
}
}
System.out.println("请输入音乐串烧后的音乐路径(格式:文件路径,文件名):");
File f3 = found(sc);
specialMedly(sis, f3);
}
@SuppressWarnings("resource")
public static SequenceInputStream mergeFile(File f1, File f2) {
SequenceInputStream sis = null;
try {
sis = new SequenceInputStream(new FileInputStream(f1), new FileInputStream(f2));
} catch (IOException e) {
e.printStackTrace();
}
return sis;
}
@SuppressWarnings("resource")
public static SequenceInputStream mergeFile(SequenceInputStream sis, File f) {
try {
sis = new SequenceInputStream(sis, new FileInputStream(f));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return sis;
}
public static void specialMedly(SequenceInputStream sis, File f3) {
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(f3));
byte[] b = new byte[512];
int len = 0;
try {
while ((len = sis.read(b)) != -1) {
bos.write(b, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (sis != null)
sis.close();
if (bos != null)
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static File found(Scanner sc) {
String str = sc.nextLine();
String[] s = str.split(",");
File f1 = new File(s[0]);
if (!f1.exists()) {
f1.mkdirs();
}
File f2 = new File(s[0], s[1]);
if (!f2.exists()) {
try {
f2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return f2;
}
public static File getFile(Scanner sc) {
while (true) {
File file = new File(sc.nextLine());
if (!file.exists()) {
System.out.println("你输入的文件不存在!请重新输入...");
} else if (file.isDirectory()) {
System.out.println("你输入的是文件夹,输入有误!");
} else {
return file;
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)