Javaでは、相対パスフォルダにファイルを作成します。
5494 ワード
//*需要:F盤のjavawork\splitysフォルダに分割されたファイルを保存します。通常は直接にフォルダのパスを絶対パスと書くことができます。
FileOutputStream fos = new FileOutputStream("F:\\javawork\\splits\\");
しかし、実際には相対的なパスを使いたいです。このように*/////先に現在のパスをFileオブジェクトにパッケージしてもいいです。File splits = new File("splits");
if(!splits.exists())
{
splits.mkdir();
}
//そしてそのままsplitsの後ろについていくだけでいいです。FileOutputStream fos = new FileOutputStream(splits+"\\");
カットファイルとマージファイルの学習で発生した問題です。元のデモコード(内部で使用されているEumerationを複写する方法でArayListを使って効率を高める方法):/*
*/
import java.io.*;
import java.util.*;
class SplitFile
{
public static void main(String[] args) throws IOException
{
splitFile();
merge();
}
public static void merge()throws IOException
{
//
File splits = new File("splits");
if (!splits.exists())
{
splits.mkdir();
}
ArrayList al = new ArrayList();
for (int x=1; x<=2; x++)
{
al.add(new FileInputStream(splits+"\\"+x+".part"));
}
//Enumeration , final
final Iterator it = al.iterator();
Enumeration en = new Enumeration()
{
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream(splits+"\\"+"0.mp3");
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
public static void splitFile()throws IOException
{
FileInputStream fis = new FileInputStream("0.mp3");
//
File splits = new File("splits");
if (!splits.exists())
{
splits.mkdir();
}
byte[] buf = new byte[1024*1024*2];
int len = 0;
int count=1;
while((len=fis.read(buf))!=-1)
{
FileOutputStream fos = new FileOutputStream(splits+"\\"+(count++)+".part");
fos.write(buf,0,len);
fos.close();
}
fis.close();
}
}