じぶんメモ

プログラミングのメモ、日常のメモとか。

Javaでのファイルアップロード

Javaでファイルアップロードを実装する方法を調べた。
FileUtilsのcopyFileが使い勝手が良さそう。

*画面側

<input type="file" name="inputFile />

*Java

    public String upload() throws Exception {
        // ファイルアップロードのテスト
        String destPath = "/usr/local/tomcat/webapps/upload";
        String myFileFileName = "uploadFile";

        try{
            File destFile  = new File(destPath, myFileFileName);
            FileUtils.copyFile(getInputFile(), destFile);
        }catch(IOException e){
            e.printStackTrace();
            return ERROR;
        }
    }

    /**
     * 取込ファイルを取得
     * @return 取込ファイル
     */
    public File getInputFile() {
        return inputFile;
    }

    /**
     * 取込ファイルを設定
     * @return 取込ファイル
     */
    public void setInputFile(File inputFile) {
        this.inputFile = inputFile;
    }

Javaでバイト数での空白埋め

空白埋めにはString.format("%10s", value)を使用すれば良いが、
String.format()はマルチバイトも1文字として認識するため、
固定長ファイル出力など、バイト数での空白埋めをするには個別で実装する必要がある。

以下文字をSJISとして扱った場合の空白埋め

public class Test{

     public static void main(String []args){
        String value = "テスト";
        value = fillUpSpace(value, 10);
        System.out.println(value);             //"テスト    "として出力される。
     }
 
     public static String fillUpSpace(String val, int num) {
        String fillUppedString = val; 
        int len = 0;

        try {
            // SJISでのサイズ取得 
            len = val.getBytes("sjis").length;

            if (num <= len) {
                // 引数の桁より少ない場合は引数の桁に切り捨てる
                fillUppedString = new String(val.getBytes("sjis"), 0, num, "sjis");
            } else {
                for(int i = 0 ; i < (num - len); i++) {
                    fillUppedString = fillUppedString + " ";
                }
            }
        } catch(Exception e) {
          return "";  
        }
        
        return fillUppedString;
     }
     
}

Javaで文字コードを指定したファイル出力

文字コードを指定してファイル出力する際は、OutputStreamWriterを使用する。

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public void outputFile() {
  FileOutputStream outputStream = null;
  OutputStreamWriter outputStreamWriter = null;

  try {
    outputStream = new FileOutputStream("ファイル名.txt");
    // エンコード
    // EUC-JPやUTF-8など
    outputStreamWriter = new OutputStreamWriter(outputStream, "SJIS");

    // 改行されないので改行コードをいれる
    outputStreamWriter.write("1行目\n");
    outputStreamWriter.write("2行目\n");

    outputStreamWriter.close();

  } catch (UnsupportedEncodingException e) {
      System.out.print(e);
  } catch (IOException e) {
      System.out.print(e);
  } finally {
    if (outputStreamWriter != null) {
      outputStreamWriter.close();
    }
    if (outputStream != null) {
      outputStream();
    }
  }
}

EasyWineでWindowsのアプリケーションを動かす

以下のサイトからEasyWine.appをダウンロードする。

matome.naver.jp

ダウンロードしたら、起動するとWindows風のエクスプローラが立ち上がる。 エクスプローラから参照できる場所にwindowsのexeファイルを設置しておけば、windowsのアプリケーションを実行することができる。