JSP /サーブレットを使用してサーバーにファイルをアップロードする方法は?

691
Thang Pham 2010-03-11 18:07.

JSP /サーブレットを使用してファイルをサーバーにアップロードするにはどうすればよいですか?私はこれを試しました:

<form action="upload" method="post">
    <input type="text" name="description" />
    <input type="file" name="file" />
    <input type="submit" />
</form>

ただし、ファイルの内容ではなく、ファイル名のみを取得します。に追加enctype="multipart/form-data"すると<form>request.getParameter()が返されますnull

調査中に、Apache CommonFileUploadに出くわしました。私はこれを試しました:

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request); // This line is where it died.

残念ながら、サーブレットは明確なメッセージと原因なしに例外をスローしました。スタックトレースは次のとおりです。

SEVERE: Servlet.service() for servlet UploadServlet threw exception
javax.servlet.ServletException: Servlet execution threw an exception
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:637)

9 answers

1203
BalusC 2010-03-12 02:27.

前書き

アップロードするファイルを参照して選択するに<input type="file">は、フォームにHTMLフィールドが必要です。HTML仕様に記載されているように、POSTメソッドを使用する必要がenctypeあり、フォームの属性をに設定する必要があり"multipart/form-data"ます。

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="text" name="description" />
    <input type="file" name="file" />
    <input type="submit" />
</form>

このようなフォームを送信すると、バイナリマルチパートフォームデータは、が設定されていない場合とは異なる形式でリクエスト本文に表示enctypeされます。

サーブレット3.0より前は、サーブレットAPIはネイティブでをサポートしていませんでしたmultipart/form-data。デフォルトのフォームenctypeであるapplication/x-www-form-urlencoded。のみをサポートします。request.getParameter()そしてCONSORTSすべての復帰を希望nullマルチパートフォームデータを使用した場合。ここで、よく知られているApache CommonsFileUploadが登場しました。

手動で解析しないでください!

理論的には、に基づいてリクエスト本文を自分で解析できますServletRequest#getInputStream()。ただし、これは正確で退屈な作業であり、RFC2388の正確な知識が必要です。自分でこれを実行したり、インターネット上の他の場所にある自家製のライブラリなしのコードをコピーして貼り付けたりしないでください。roseindia.netなど、多くのオンラインソースがこれに失敗しました。PDFファイルのアップロードも参照してください。何百万ものユーザーが何年も使用している(そして暗黙的にテストされている)実際のライブラリを使用する必要があります。このようなライブラリは、その堅牢性が証明されています。

すでにサーブレット3.0以降を使用している場合は、ネイティブAPIを使用してください

少なくともサーブレット3.0(Tomcat 7、Jetty 9、JBoss AS 6、GlassFish 3など)を使用している場合は、提供さHttpServletRequest#getPart()れている標準APIを使用して、個々のマルチパートフォームデータ項目を収集できます(ほとんどのサーブレット3.0実装は実際にApacheを使用します) Commons FileUploadは、このための裏で!)。また、通常のフォームフィールドはgetParameter()通常の方法で使用できます。

まず、サーブレットがリクエストを@MultipartConfig認識してサポートし、動作するようにするために、サーブレットに注釈を付けます。multipart/form-datagetPart()

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    // ...
}

次に、doPost()次のように実装します。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String description = request.getParameter("description"); // Retrieves <input type="text" name="description">
    Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file">
    String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.
    InputStream fileContent = filePart.getInputStream();
    // ... (do your job here)
}

に注意してくださいPath#getFileName()。これは、ファイル名の取得に関するMSIEの修正です。このブラウザは、ファイル名だけでなく、名前に沿って完全なファイルパスを誤って送信します。

<input type="file" name="file" multiple="true" />複数ファイルのアップロード用の場合は、以下のように収集します(残念ながら、のような方法はありませんrequest.getParts("file"))。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // ...
    List<Part> fileParts = request.getParts().stream().filter(part -> "file".equals(part.getName()) && part.getSize() > 0).collect(Collectors.toList()); // Retrieves <input type="file" name="file" multiple="true">

    for (Part filePart : fileParts) {
        String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.
        InputStream fileContent = filePart.getInputStream();
        // ... (do your job here)
    }
}

サーブレット3.1をまだ使用していない場合は、送信されたファイル名を手動で取得します

Part#getSubmittedFileName()サーブレット3.1(Tomcat 8、Jetty 9、WildFly 8、GlassFish 4など)で導入されたことに注意してください。サーブレット3.1をまだ使用していない場合は、送信されたファイル名を取得するための追加のユーティリティメソッドが必要です。

private static String getSubmittedFileName(Part part) {
    for (String cd : part.getHeader("content-disposition").split(";")) {
        if (cd.trim().startsWith("filename")) {
            String fileName = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
            return fileName.substring(fileName.lastIndexOf('/') + 1).substring(fileName.lastIndexOf('\\') + 1); // MSIE fix.
        }
    }
    return null;
}
String fileName = getSubmittedFileName(filePart);

ファイル名の取得に関するMSIEの修正に注意してください。このブラウザは、ファイル名だけでなく、名前に沿って完全なファイルパスを誤って送信します。

サーブレット3.0をまだ使用していない場合は、Apache CommonsFileUploadを使用してください

サーブレット3.0をまだ使用していない場合(アップグレードする時期ではありませんか?)、一般的な方法は、Apache CommonsFileUploadを使用してマルチパートフォームのデータ要求を解析することです。優れたユーザーガイドとFAQがあります(両方を注意深く読んでください)。O'Reilly( " cos ")もありますがMultipartRequest、いくつかの(マイナーな)バグがあり、何年もの間積極的に保守されていません。私はそれを使用することをお勧めしません。Apache Commons FileUploadはまだアクティブに維持されており、現在非常に成熟しています。

Apache Commons FileUploadを使用するには、Webアプリケーションに少なくとも次のファイルが含まれている必要があります/WEB-INF/lib

  • commons-fileupload.jar
  • commons-io.jar

Commons IOを忘れたため、最初の試行が失敗した可能性があります。

以下doPost()は、UploadServletApache CommonsFileUploadを使用した場合のキックオフの例です。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()) {
                // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                String fieldName = item.getFieldName();
                String fieldValue = item.getString();
                // ... (do your job here)
            } else {
                // Process form file field (input type="file").
                String fieldName = item.getFieldName();
                String fileName = FilenameUtils.getName(item.getName());
                InputStream fileContent = item.getInputStream();
                // ... (do your job here)
            }
        }
    } catch (FileUploadException e) {
        throw new ServletException("Cannot parse multipart request.", e);
    }

    // ...
}

それはあなたが呼び出すことはありませんということが非常に重要ですgetParameter()getParameterMap()getParameterValues()getInputStream()getReader()事前に同じリクエストに応じてなど、。それ以外の場合、サーブレットコンテナはリクエスト本文を読み取って解析するため、Apache CommonsFileUploadは空のリクエスト本文を取得します。ao ServletFileUpload#parseRequest(request)が空のリストを返すも参照してください。

に注意してくださいFilenameUtils#getName()。これは、ファイル名の取得に関するMSIEの修正です。このブラウザは、ファイル名だけでなく、名前に沿って完全なファイルパスを誤って送信します。

または、Filterこれをすべて自動的に解析するaでラップし、リクエストのパラメータマップに戻すこともできrequest.getParameter()ますrequest.getAttribute()。これにより、通常の方法を引き続き使用して、アップロードされたファイルをで取得できます。このブログ記事で例を見つけることができます。

getParameter()まだ戻ってくるGlassFish3バグの回避策null

3.1.2より古いGlassfishバージョンには、まだが返されるバグがあることに注意してください。このようなコンテナをターゲットにしていてアップグレードできない場合は、次のユーティリティメソッドを使用してから値を抽出する必要があります。getParameter()nullgetPart()

private static String getValue(Part part) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(part.getInputStream(), "UTF-8"));
    StringBuilder value = new StringBuilder();
    char[] buffer = new char[1024];
    for (int length = 0; (length = reader.read(buffer)) > 0;) {
        value.append(buffer, 0, length);
    }
    return value.toString();
}
String description = getValue(request.getPart("description")); // Retrieves <input type="text" name="description">

アップロードしたファイルを保存しています(使用しgetRealPath()ないでpart.write()ください!)

取得しInputStreamfileContent変数(上記のコードスニペットに示されている変数)をディスクまたはデータベースに適切に保存する方法の詳細については、次の回答を参照してください。

  • アップロードしたファイルをサーブレットアプリケーションに保存するための推奨される方法
  • 画像をアップロードしてデータベースに保存するにはどうすればよいですか?
  • PartをBlobに変換して、MySQLに保存する方法を教えてください。

アップロードされたファイルを提供する

保存したファイルをディスクまたはデータベースからクライアントに適切に提供する方法の詳細については、次の回答を参照してください。

  • <h:graphicImage>または<img>タグを使用して、webapps / webcontext / deployフォルダーの外部から画像を読み込みます
  • JSPページのデータベースから画像を取得して表示するにはどうすればよいですか?
  • JavaWebアプリケーションでアプリケーションサーバーの外部から静的データを提供する最も簡単な方法
  • HTTPキャッシングをサポートする静的リソースサーブレットの抽象テンプレート

フォームをAjaxifying

Ajax(およびjQuery)を使用してアップロードする方法については、次の回答に進んでください。フォームデータを収集するためのサーブレットコードは、このために変更する必要がないことに注意してください。応答方法のみが変更される可能性がありますが、これはかなり簡単です(つまり、JSPに転送する代わりに、Ajax呼び出しを担当するスクリプトが期待するものに応じて、JSONまたはXML、あるいはプレーンテキストを出力するだけです)。

  • JSP /サーブレットとAjaxを使用してサーバーにファイルをアップロードする方法は?
  • xmlHttpRequestを介してマルチパートとしてファイルを送信します
  • JavaサーブレットへのHTML5ファイルのアップロード

これがすべて役立つことを願っています:)

26
Amila 2015-08-27 02:39.

Spring MVCを使用している場合は、次のようにします(誰かが役立つと思った場合に備えて、ここに残しておきます)。

enctype属性が「multipart/form-data」に設定されたフォームを使用します(BalusCの回答と同じ)

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Upload"/>
</form>

コントローラで、次のようにリクエストパラメータfileMultipartFileタイプにマップします。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public void handleUpload(@RequestParam("file") MultipartFile file) throws IOException {
    if (!file.isEmpty()) {
            byte[] bytes = file.getBytes(); // alternatively, file.getInputStream();
            // application logic
    }
}

MultipartFile'sgetOriginalFilename()getSize()。を使用してファイル名とサイズを取得できます。

私はこれをSpringバージョンでテストしました4.1.1.RELEASE

12
joseluisbz 2014-01-25 19:44.

Tomcat 6 o7にコンポーネントまたは外部ライブラリがない

web.xmlファイルでアップロードを有効にする:

http://joseluisbz.wordpress.com/2014/01/17/manually-installing-php-tomcat-and-httpd-lounge/#Enabling%20File%20Uploads。

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <multipart-config>
      <max-file-size>3145728</max-file-size>
      <max-request-size>5242880</max-request-size>
    </multipart-config>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

あなたが見ることができるように

    <multipart-config>
      <max-file-size>3145728</max-file-size>
      <max-request-size>5242880</max-request-size>
    </multipart-config>

JSPを使用したファイルのアップロード。ファイル:

htmlファイル内

<form method="post" enctype="multipart/form-data" name="Form" >

  <input type="file" name="fFoto" id="fFoto" value="" /></td>
  <input type="file" name="fResumen" id="fResumen" value=""/>

JSPファイルまたはサーブレット内

    InputStream isFoto = request.getPart("fFoto").getInputStream();
    InputStream isResu = request.getPart("fResumen").getInputStream();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte buf[] = new byte[8192];
    int qt = 0;
    while ((qt = isResu.read(buf)) != -1) {
      baos.write(buf, 0, qt);
    }
    String sResumen = baos.toString();

max-file-sizemax-request-size、その他の設定可能なオプションなど、サーブレットの要件に合わせてコードを編集します...

11
Pranav 2012-05-18 01:11.

common-io.1.4.jarファイルをlibディレクトリに含める必要があります。または、NetBeansなどのエディタで作業している場合は、プロジェクトのプロパティに移動してJARファイルを追加するだけで完了です。

common.io.jarファイルを取得するには、グーグルで検索するか、Apache TomcatのWebサイトにアクセスして、このファイルを無料でダウンロードするオプションを入手してください。ただし、Windowsユーザーの場合は、バイナリZIPファイルをダウンロードすることを忘れないでください。

9
feel good and programming 2013-01-08 19:50.

添付ファイルの有無にかかわらず、すべてのHtmlフォームに共通のサーブレットを使用しています。このサーブレットはTreeMap、キーがjsp名である場所を返します。パラメータと値はユーザー入力であり、すべての添付ファイルを固定ディレクトリに保存し、後で選択したディレクトリの名前を変更します。ここで、接続は接続オブジェクトを持つカスタムインターフェイスです。これはあなたを助けると思います

public class ServletCommonfunctions extends HttpServlet implements
        Connections {

    private static final long serialVersionUID = 1L;

    public ServletCommonfunctions() {}

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException {}

    public SortedMap<String, String> savefilesindirectory(
            HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // Map<String, String> key_values = Collections.synchronizedMap( new
        // TreeMap<String, String>());
        SortedMap<String, String> key_values = new TreeMap<String, String>();
        String dist = null, fact = null;
        PrintWriter out = response.getWriter();
        File file;
        String filePath = "E:\\FSPATH1\\2KL06CS048\\";
        System.out.println("Directory Created   ????????????"
            + new File(filePath).mkdir());
        int maxFileSize = 5000 * 1024;
        int maxMemSize = 5000 * 1024;
        // Verify the content type
        String contentType = request.getContentType();
        if ((contentType.indexOf("multipart/form-data") >= 0)) {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // maximum size that will be stored in memory
            factory.setSizeThreshold(maxMemSize);
            // Location to save data that is larger than maxMemSize.
            factory.setRepository(new File(filePath));
            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);
            // maximum file size to be uploaded.
            upload.setSizeMax(maxFileSize);
            try {
                // Parse the request to get file items.
                @SuppressWarnings("unchecked")
                List<FileItem> fileItems = upload.parseRequest(request);
                // Process the uploaded file items
                Iterator<FileItem> i = fileItems.iterator();
                while (i.hasNext()) {
                    FileItem fi = (FileItem) i.next();
                    if (!fi.isFormField()) {
                        // Get the uploaded file parameters
                        String fileName = fi.getName();
                        // Write the file
                        if (fileName.lastIndexOf("\\") >= 0) {
                            file = new File(filePath
                                + fileName.substring(fileName
                                        .lastIndexOf("\\")));
                        } else {
                            file = new File(filePath
                                + fileName.substring(fileName
                                        .lastIndexOf("\\") + 1));
                        }
                        fi.write(file);
                    } else {
                        key_values.put(fi.getFieldName(), fi.getString());
                    }
                }
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return key_values;
    }
}
8
Shivangi Gupta 2017-07-16 09:42.

Spring MVCの場合、私はこれを何時間も試みており、データと画像の両方のフォーム入力を取得するために機能する、より単純なバージョンを作成することができました。

<form action="/handleform" method="post" enctype="multipart/form-data">
  <input type="text" name="name" />
  <input type="text" name="age" />
  <input type="file" name="file" />
  <input type="submit" />
</form>

処理するコントローラー

@Controller
public class FormController {
    @RequestMapping(value="/handleform",method= RequestMethod.POST)
    ModelAndView register(@RequestParam String name, @RequestParam int age, @RequestParam MultipartFile file)
            throws ServletException, IOException {

        System.out.println(name);
        System.out.println(age);
        if(!file.isEmpty()){
            byte[] bytes = file.getBytes();
            String filename = file.getOriginalFilename();
            BufferedOutputStream stream =new BufferedOutputStream(new FileOutputStream(new File("D:/" + filename)));
            stream.write(bytes);
            stream.flush();
            stream.close();
        }
        return new ModelAndView("index");
    }
}

それが役に立てば幸い :)

6
Geoffrey Malafsky 2013-09-11 05:15.

この問題のもう1つの原因は、Tomcatが組み込まれたGeronimoを使用している場合に発生します。この場合、commons-ioとcommons-fileuploadのテストを何度も繰り返した後、commons-xxxjarを処理する親クラスローダーから問題が発生します。これは防ぐ必要があります。クラッシュは常に次の場所で発生しました。

fileItems = uploader.parseRequest(request);

fileItemsのListタイプは、commons-fileuploadの現在のバージョンで変更され、List<FileItem>一般的な以前のバージョンとは特に対照的であることに注意してくださいList

commons-fileuploadとcommons-ioのソースコードをEclipseプロジェクトに追加して、実際のエラーを追跡し、最終的にいくつかの洞察を得ました。まず、スローされる例外はThrowable型であり、指定されたFileIOExceptionでもExceptionでもありません(これらはトラップされません)。第二に、エラーメッセージは、axis2がcommons-ioを見つけることができなかったため、クラスが見つからないと述べているという点でわかりにくいです。Axis2は私のプロジェクトではまったく使用されていませんが、標準インストールの一部としてGeronimoリポジトリサブディレクトリにフォルダとして存在します。

最後に、私の問題をうまく解決する実用的な解決策を提示した場所を1つ見つけました。デプロイメントプランでは、jarを親ローダーから非表示にする必要があります。これは、以下に示す私の完全なファイルとともにgeronimo-web.xmlに入れられました。

Pasted from <http://osdir.com/ml/user-geronimo-apache/2011-03/msg00026.html> 



<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<web:web-app xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0" xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0" xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2" xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2" xmlns:log="http://geronimo.apache.org/xml/ns/loginconfig-2.0" xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:pers="http://java.sun.com/xml/ns/persistence" xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0" xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
    <dep:environment>
        <dep:moduleId>
            <dep:groupId>DataStar</dep:groupId>
            <dep:artifactId>DataStar</dep:artifactId>
            <dep:version>1.0</dep:version>
            <dep:type>car</dep:type>
        </dep:moduleId>

<!--Don't load commons-io or fileupload from parent classloaders-->
        <dep:hidden-classes>
            <dep:filter>org.apache.commons.io</dep:filter>
            <dep:filter>org.apache.commons.fileupload</dep:filter>
        </dep:hidden-classes>
        <dep:inverse-classloading/>        


    </dep:environment>
    <web:context-root>/DataStar</web:context-root>
</web:web-app>
0
thouliha 2015-05-22 06:49.

次に、apachecommons-fileuploadを使用した例を示します。

// apache commons-fileupload to handle file upload
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(DataSources.TORRENTS_DIR()));
ServletFileUpload fileUpload = new ServletFileUpload(factory);

List<FileItem> items = fileUpload.parseRequest(req.raw());
FileItem item = items.stream()
  .filter(e ->
  "the_upload_name".equals(e.getFieldName()))
  .findFirst().get();
String fileName = item.getName();

item.write(new File(dir, fileName));
log.info(fileName);
0
Lakindu Hewawasam 2020-11-25 00:49.

最初に、フォームのenctype属性を「multipart / form-data」に設定する必要があります

これを以下に示します。

<form action="Controller" method="post" enctype="multipart/form-data">
     <label class="file-upload"> Click here to upload an Image </label>
     <input type="file" name="file" id="file" required> 
</form>

次に、サーブレット「コントローラ」にマルチパートの注釈を追加して、マルチパートデータがサーブレットで処理されることを示します。

これを行った後、フォームを介して送信された部分を取得し、送信されたファイルのファイル名(パスを含む)を取得します。これを使用して、目的のパスに新しいファイルを作成し、ファイルの一部を新しく作成したファイルに書き込んで、ファイルを再作成します。

As shown below:

@MultipartConfig

public class Controller extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        insertImage(request, response);
    }

    private void addProduct(HttpServletRequest request, HttpServletResponse response) {
        Part filePart = request.getPart("file");
        String imageName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();

        String imageSavePath = "specify image path to save image"; //path to save image
        FileOutputStream outputStream = null;
        InputStream fileContent = null;

        try {
            outputStream = new FileOutputStream(new File(imageSavePath + File.separator + imageName));
            //creating a new file with file path and the file name
            fileContent = filePart.getInputStream();
            //getting the input stream
            int readBytes = 0;
            byte[] readArray = new byte[1024];
            //initializing a byte array with size 1024

            while ((readBytes = fileContent.read(readArray)) != -1) {
                outputStream.write(readArray, 0, readBytes);
            }//this loop will write the contents of the byte array unitl the end to the output stream
        } catch (Exception ex) {
            System.out.println("Error Writing File: " + ex);
        } finally {
            if (outputStream != null) {
                outputStream.close();
                //closing the output stream
            }
            if (fileContent != null) {
                fileContent.close();
                //clocsing the input stream
            }
        }
    }
}

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

Netflixのジョエルマクヘイルとのジョエルマクヘイルショーは、ジョエルマクヘイルにぴったりの車を復活させます

Netflixのジョエルマクヘイルとのジョエルマクヘイルショーは、ジョエルマクヘイルにぴったりの車を復活させます

ジョエル・マクヘイル、マイク・コルター(スクリーンショット:Netflix)「私の神よ、これは1つのことを変えます。」これは、ジョエル・マクヘイルとのジョエル・マクヘイルショーの最後のジョークです。リアリティ番組の嘲笑と寛大なスナキネスの時間は、なじみのある顔を見つけます。

チームロケットは20年ぶりにポケモンシリーズでアッシュを破った

チームロケットは20年ぶりにポケモンシリーズでアッシュを破った

画像経由:@pancakeparadox(Twitter)。1997年にポケモンシリーズが初公開されて以来、チームロケット(またはラテンアメリカではチームロケット)として知られる悪役のグループは、何度もアッシュに直面してきました。

今週の科学技術でトランプがめちゃくちゃになったことすべて

今週の科学技術でトランプがめちゃくちゃになったことすべて

画像:ゲッティ私たち全員が千年もの間生きていて、私たちの体が燃える風によってほこりと長引く悲鳴だけに押し流されたと考えるのは驚くべきことです。私たちがそうしていないことを除いて、それはトランプ政権の最初の週の終わりであり、驚くほど多くの恐ろしいことがすでに起こっています。

あなたの「マイクロピッグ」が代わりに通常のピッグになってしまったとしても驚かないでください

あなたの「マイクロピッグ」が代わりに通常のピッグになってしまったとしても驚かないでください

そして今、あることを手に入れていると思っていたが、まったく別のことをしてしまった男の話。CBSニュースは、彼女が「ミニブタ」であるという誤ったふりをしてエスターを養子にしたカナダ人のスティーブジェンキンスの心温まる物語をもたらします。これは、特にせいぜいゴールデンレトリバーまたはセントバーナードをストラップします。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language