10

.xlsx ファイルの読み取りで問題が発生しました。WorkbookFactory.create(inputStream); を使用するたびに、ランダムな名前の一時ファイルが /tmp/pofiles ディレクトリの下に作成されます。このディレクトリは、最初のユーザーの RW-RR- パーミッションで作成されます。したがって、同じマシン上の別のユーザーがこれらのファイルにアクセスしようとしても、アクセスできません。

任意の方法を提案してください

1) これらの一時ファイルを /tmp/poifiles ではなく /tmp ディレクトリの下に作成するにはどうすればよいですか (私は RHEL V5.0 を使用しています)。

2) また、一時ファイルを読み取る場所を変更するなど、POI を構成するにはどうすればよいですか??

異なるユーザーが POI を介して同じ .xlsx ファイルにアクセスするという私の問題を解決するために、もう助けが必要です。

4

2 に答える 2

15

ヤッピー...私は解決策を得ました...

POIは、次の方法を使用して一時ファイルを作成します。

public static File createTempFile(String prefix, String suffix)
{
    if (dir == null) {
        dir = new File(System.getProperty("java.io.tmpdir"), "poifiles");
        dir.mkdir();
        if (System.getProperty("poi.keep.tmp.files") == null) {
            dir.deleteOnExit();
        }
    }
    File newFile = new File(dir, prefix + rnd.nextInt() + suffix);
    if (System.getProperty("poi.keep.tmp.files") == null) {
        newFile.deleteOnExit();
    }
    return newFile;
}

ここで、ご覧のとおり、プロパティ「java.io.tmpdir」から場所を取得し、その中にpoifilesディレクトリを作成します...

このプロパティを(System.setProperty( "java.io.tmpdir"、 "somepath")を使用して)ユーザー固有の場所に設定することにより、java.io.tmpdirの場所を変更しました。常にアクセス可能な場所にある一時ファイルであり、最初のユーザーだけでなく、自分だけがアクセスできるディレクトリを作成する権限を取得します... !!!

于 2011-03-16T11:20:23.647 に答える
11

システムプロパティ「java.io.tmpdir」を変更できない場合に、POIが一時ファイルをプログラムで読み取る場所を変更する方法は次のとおりです。

File dir = new File("somepath");
dir.mkdir();
TempFile.setTempFileCreationStrategy(new DefaultTempFileCreationStrategy(dir));

これは、Apache POI TempFileおよびDefaultTempFileCreationStrategyヘルパー クラスによって駆動されます。

于 2016-02-17T09:49:38.817 に答える