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

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする&nbsp;

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

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

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

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

HMSプリンスオブウェールズの橋はスターウォーズからまっすぐです

HMSプリンスオブウェールズの橋はスターウォーズからまっすぐです

BAE Systems Maritimeは昨日、英国海軍の2番目のクイーンエリザベスクラスの空母であるHMSプリンスオブウェールズのブリッジモジュールを展開しました。公海を航海するよりも、アウターリムの惑星を周回してタイファイターを発射する必要があるようです。70,000の排水量のトン運搬船は、2020年に就役し、姉のエリザベス女王と同様に、約40機の航空機を運ぶ予定です。

ルイビルはサヨナラゲームでウェイクフォレストを倒すために家を盗んだ

ルイビルはサヨナラゲームでウェイクフォレストを倒すために家を盗んだ

ルイビルは、通常の大学野球の強みであるピッチング、ディフェンス、スマートベースランニングを通じて、全国ランキングのトップ5と19-2の会議記録への道を歩みました。昨夜、彼らは野球の最もエキサイティングなプレーの1つである盗塁を使用して、ウェイクフォレストのスイープを完了しました。

おいしいツイストのためにコーンブレッドであなたの次のサンドイッチを作りましょう

おいしいツイストのためにコーンブレッドであなたの次のサンドイッチを作りましょう

粗いパン粉とふわふわの食感のコーンブレッドは、唐辛子を吸い上げるのに理想的な乗り物です。しかし、それだけではありません。

別の驚くべきマーベルヒーローがキャプテンアメリカに参加します:シビルウォー!

別の驚くべきマーベルヒーローがキャプテンアメリカに参加します:シビルウォー!

ニール・ブロムカンプが、チャッピーが第10地区をどのように遅らせたのかについて話します。フォースの覚醒の噂は、次の予告編に何を期待するかについてのいじめを提供します。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language