/*
* 需求:做一個音樂串燒
* 分析:
* 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(
"是否繼續(xù)拼接音樂?(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(
"是否繼續(xù)增加音樂?(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;}}}
}
總結
以上是生活随笔為你收集整理的关于Java之IO流音乐拼接小项目的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。